有谁知道找出对象实例占用多少内存的方法?
例如,如果我有以下对象的实例:
TestClass tc = new TestClass();
有没有办法找出实例占用了多少内存tc
?
询问的原因是,尽管 C# 内置了内存管理,但我经常遇到不清除对象实例的问题(例如,跟踪某事的列表)。
有几个相当不错的内存分析器(例如 ANTS Profiler),但在多线程环境中,即使使用这些工具,也很难弄清楚什么属于哪里。
有谁知道找出对象实例占用多少内存的方法?
例如,如果我有以下对象的实例:
TestClass tc = new TestClass();
有没有办法找出实例占用了多少内存tc
?
询问的原因是,尽管 C# 内置了内存管理,但我经常遇到不清除对象实例的问题(例如,跟踪某事的列表)。
有几个相当不错的内存分析器(例如 ANTS Profiler),但在多线程环境中,即使使用这些工具,也很难弄清楚什么属于哪里。
如果您不尝试在代码本身中执行此操作,我假设基于您的 ANTS 参考,请尝试查看 CLRProfiler(当前为 v2.0)。它是免费的,如果您不介意相当简单的 UI,它可以提供有价值的信息。它将为您提供各种统计数据的深入概述。不久前,我将它用作查找内存韭菜的一种工具。
在此处下载:https ://github.com/MicrosoftArchive/clrprofiler
如果您确实想在代码中执行此操作,CLR 具有您可以使用的分析 API。如果您在 CLRProfiler 中找到信息,因为它使用这些 API,您应该也可以在代码中完成。更多信息:http: //msdn.microsoft.com/de-de/magazine/cc300553 (en-us).aspx
(它不像使用 WinDbg 那样神秘,但要准备好深入 CLR。)
Microsoft 免费提供的CLR Profiler在这类事情上做得非常好。
可以在此处下载对整个分析器的介绍。不久前,Patterns & Practices 团队还整理了一些东西,详细说明了如何使用分析器。
它在向您展示在这些线程中创建的不同线程和对象方面做得相当合理。
希望这能有所启发。快乐的剖析!
我对MemProfiler有很好的体验。它为您提供对象创建时间的堆栈跟踪以及对象仍未被垃圾回收的所有图表。