[英]How to trace memory allocation in C#
是否有任何方法可以跟踪GC为C#.net中的特定模块分配,取消分配和检索的内存量?
我想找出模块中可能的内存泄漏。 我在生产中偶尔遇到系统内存不足异常。
您应该使用内存探查器来探查内存分配。
我使用了JetBrains dotTrace ,它具有一种很好的模式,可以在不同时间拍摄两个快照,并显示在这两个快照之间分配了哪些对象但未收集哪些对象。 便于查找内存泄漏,您可以在其中分配新实例而不收集它们。
要查看两个应用程序内存状态之间的差异,可以标记时间间隔的开始和结束,然后捕获差异快照,该快照显示在标记的时间间隔内分配和释放了多少内存。 可以过滤视图以仅显示活动对象,新对象或无效对象,或显示新对象和无效对象之间的差异。
内存分析器是一个好主意。 你也可以使用它来获取草图PerformanceCounters
参见MSDN 。 如果很难在本地复制,则可以在产品环境中收集一些统计信息。
您可以尝试使用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内存分配分析器。
如前所述,JetBrains以及.NET Memory Profiler已经帮助了我多次。 如果您在WPF中存在内存泄漏问题,则本文中有一些不错的建议(旧的但很多仍然有效):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.