1

是否有任何方法可以跟踪 GC 为 C# .net 中的特定模块分配、取消分配和检索多少内存?

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

4

4 回答 4

1

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

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

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

于 2013-07-01T16:28:39.130 回答
0

内存分析器是个好主意。您还可以使用PerformanceCountersSee the msdn获得粗略的草图。如果很难在本地复制,您可以收集有关您的产品环境的一些统计信息。

于 2013-07-01T16:32:54.633 回答
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 内存分配分析器。

于 2013-07-01T16:54:36.247 回答
0

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

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

于 2013-07-02T11:22:47.067 回答