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

时间:2008-09-13 20:12:51

标签: c# performance memory profiler

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

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

TestClass tc = new TestClass();

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

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

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

3 个答案:

答案 0 :(得分:7)

如果您不想在代码本身中进行此操作,我假设基于您的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。)

答案 1 :(得分:3)

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

可以下载here整个探查器的介绍。图案&实践团队put something一起回顾详细说明如何使用分析器。

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

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

答案 2 :(得分:2)

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