如何在C#中跟踪内存分配

时间:2013-07-01 16:25:31

标签: c# garbage-collection

是否有任何方法可以跟踪GC为C#.net中的特定模块分配,解除分配和检索的内存量?

我想在我的模块中找出可能的内存泄漏。我偶尔会在生产中出现系统内存异常。

4 个答案:

答案 0 :(得分:0)

您应该使用内存分析器来分析内存分配。

我使用了JetBrains dotTrace,它有一个很好的模式,可以在不同的时间拍摄两个快照,并显示哪些对象已分配但未在这两个快照之间收集。允许轻松查找内存泄漏,您可以继续分配新实例而不收集它们。

  

要查看两个应用程序内存状态之间的差异,您可以   标记时间间隔的开始和结束,然后捕获a   差异快照,显示分配了多少内存和   在标记的时间间隔内释放。视图可以过滤到   仅显示实时,新对象或死对象,或新对象之间的差异   和死物。

答案 1 :(得分:0)

内存分析器是个好主意。您还可以使用PerformanceCounters查看草图[{3}}。然后,如果难以在本地重现,您可以在您的产品环境中收集一些统计数据。

答案 2 :(得分:0)

您可以使用Visual Studio尝试.NET内存分配概要分析。 试试这篇msdn文章,向您展示http://blogs.msdn.com/b/dotnet/archive/2013/04/04/net-memory-allocation-profiling-with-visual-studio-2012.aspx的方式。 大约1/3的文章介绍了如何运行.NET内存分配探查器。

答案 3 :(得分:0)

如前所述,JetBrains以及.NET内存分析器已经多次帮助了我。如果你在WPF中有内存泄漏问题,那么这篇文章中有一些很好的建议(旧的,但很多仍然有效):

http://blogs.msdn.com/b/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-based-applications.aspx