找出C#中对象使用了多少内存?

有没有人知道一种方法来找出一个对象的实例占用多少内存?

例如,如果我有以下对象的实例:

TestClass tc = new TestClass(); 

有没有办法找出实例tc占用多少内存?

问的原因是,尽管C#内置了内存管理,但我常常遇到的问题是没有清除对象的实例(例如跟踪某些内容的List)。

有几个相当不错的内存分析器(例如ANTS Profiler),但在multithreading环境中很难弄清楚哪些属于哪里,即使使用这些工具。

如果您不想在代码本身中进行此操作,我假设基于您的ANTS参考,请尝试查看CLRProfiler(目前为v2.0)。 它是免费的,如果您不介意相当简单的UI,它可以提供有价值的信息。 它将为您提供各种统计数据的深入概述。 我用了一段时间作为查找记忆韭菜的工具。

在此处下载: http : //www.microsoft.com/downloads/details.aspx?FamilyId = A362781C- 3870-43BE-8926-862B40AA0CD0& displaylang = en

如果您确实希望在代码中执行此操作,则CLR具有您可以使用的分析API。 如果您在CLRProfiler中找到信息,因为它使用这些API,您也应该能够在代码中执行此操作。 更多信息: http : //msdn.microsoft.com/de-de/magazine/cc300553(en-us).aspx

(它不像使用WinDbg一样神秘,但要做好准备深入CLR。)

由Microsoft免费提供的CLR Profiler在这类事情上表现非常出色。

可在此处下载整个分析器的介绍。 此外,模式与实践团队还将一些内容放在一起,详细介绍了如何使用分析器。

它在向您显示在这些线程中创建的不同线程和对象方面做了相当合理的工作。

希望这会有所启发。 快乐剖析!

我对MemProfiler有很好的经验。 它为您提供了创建对象时的堆栈跟踪以及对象仍未进行垃圾回收的所有图形。