繁体   English   中英

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

[英]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中存在内存泄漏问题,则本文中有一些不错的建议(旧的但很多仍然有效):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM