在C#中检测导致内存泄漏的对象

时间:2015-09-29 04:14:30

标签: c# memory-leaks crash-dumps

如何在.net中检测导致内存泄漏的对象。是否可以使用崩溃转储来检测导致内存泄漏的对象?

2 个答案:

答案 0 :(得分:0)

要检测和调查.NET中的内存泄漏,您有以下几种选择:

  1. 使用像RedGate's ANTS这样的内存分析器工具(许多其他类似的工具可用)。
  2. 使用WinDBG及其SOS扩展名。
  3. 使用基于弱参考的内存泄漏检测器自行测试您的应用程序。
  4. 要在调查内存泄漏时使用故障转储,请参阅this stackoverflow问题和this MSDN链接。

答案 1 :(得分:0)

有一个转储(如果已经正确地看到了这个article),可能会有多次转储。

你能做什么:

  • 如果您还没有,请安装Windows SDK以获取Windows调试工具
  • 如果你有一个x86进程(注意:进程的体系结构是相关的,而不是运行该进程的系统的体系结构)使用WinDBG(x86),否则使用x64版本。
  • Go File - 打开Crash Dump,找到您的转储文件并将其打开
  • 假设您的进程是.net 4,在调试器中输入

    .loadby sos clr后跟!dumpheap -stat

  • 这将输出托管类型的计数和类名。

  • 拥有多个转储将使您更容易,但肯定不像使用内存分析器那么容易