gpt4 book ai didi

c# - 如何解决私有(private)字节( native 内存)泄漏?

转载 作者:太空狗 更新时间:2023-10-29 19:26:34 30 4
gpt4 key购买 nike

我正在开发一个似乎有漏洞的 C# 应用程序。我使用了内存分析器,发现我的

private bytes 不断增加,但是 所有 Heaps 中的字节数 没有,这意味着可能是 native 内存泄漏

现在我卡住了,我该如何找到 native 代码中的内存泄漏?

最佳答案

首先,如果您有泄漏进程的转储,您可以在 WinDbg 中打开它并发出命令:!地址-摘要

  • 如果 RegionUsageHeap 很大,那么它应该是 native 内存泄漏
  • 如果 RegionUsageIsVAD,则它应该是 .NET 内存泄漏。

如果这是 native 泄漏,那么您有 2 个选择:

  • 使用 DebugDiag:出现提示时,选择“Native Memory leak and Handle leak”,选择您要诊断的进程,然后开始使用该应用程序,直到您试验内存泄漏。完成后,生成应用程序的完整转储(右键单击泄漏规则并选择完整用户转储)。然后你可以分析生成的转储(你需要正确配置符号才能有效地工作):在“高级分析”选项卡上,选择“内存压力分析器”,打开转储文件并按“开始分析”。这会生成您可以分析的 html 报告。可以引用这个page以获得详细的演练。

  • 使用应用程序验证程序/WinDbg。在应用程序验证程序中,选择您的应用程序 (.exe)。在测试页面中,确保选择了 Basics/Heaps。在下方 Pane 中,确保“Traces”设置为 true。保存配置后,重新运行应用程序并在发生泄漏时生成完整转储。不要忘记在生成转储后清除应用程序标志。然后您可以从 WinDbg 中打开转储,并在“!heap”命令的帮助下调查泄漏。特别是,'!heap -l' 会给你一个泄漏 block 的列表,'!heap -p -a ' 会显示一个 block 的详细信息,包括分配的调用堆栈。

如果这是 .NET 泄漏,可以使用第三方工具对其进行故障排除。从 1.2 版开始,DebugDiag 也可以执行 .NET 内存泄漏分析(但是从未尝试过)。

关于c# - 如何解决私有(private)字节( native 内存)泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900433/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com