C# - 以编程方式尝试检查代码块中的内存泄漏的方法

Bob*_*een 6 .net c# garbage-collection memory-leaks

我试图看看尝试以编程方式准确确定托管.NET代码块中是否存在潜在的内存泄漏是多么可行.这样做的原因是隔离一些似乎泄漏内存的代码块,然后使用标准分析器来进一步确定泄漏的实际原因.在我的特定商业案例中,我将加载第三方类,扩展我的一个类以检查泄漏.

首先想到的方法是这样的:

  • 等待GC运行.
  • 从GC获取当前分配的内存.
  • [运行托管代码块.]
  • 等待GC运行.
  • 从GC获取当前分配的内存,并在运行代码块之前从记录的已分配内存中减去.如果在运行的代码块中分配的所有对象都被适当地解除引用并收集,理论上差异应该(接近)0是否正确?

当然,问题的直接问题是可能会等待......并等待...并等待非确定性GC运行.如果我们跳过这个方面,用于确定代码块是否泄漏任何内存的计算可能会有很大差异,并且不一定准确,因为当时可能尚未收集某些项目.

如果代码块泄漏内存,上述内容是否是我尝试确定的最佳选择?还是有其他工作方法在现实生活中使用?谢谢.

Uwe*_*eim 6

就个人而言,我自己也不敢做记忆分析.我担心自己要么没有完整的知识,要么这样做需要花费很多时间.

相反,我使用了成功的内存分析器,如Red Gate的ANTS Memory Profiler.

  • 并不是Redgate公司现在收取反射器后承诺它永远是免费的.一旦Redgate愚弄我,对你感到羞耻,欺骗我两次..... (2认同)