在C#中如何查找一个对象使用了多少内存?

16

有没有办法找出一个对象实例占用了多少内存?

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

TestClass tc = new TestClass();

有没有一种方法可以找出实例tc占用了多少内存?

问这个问题的原因是虽然C#有内置的内存管理,但我经常遇到未清除对象实例(例如跟踪某些内容的列表)的问题。

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


这回答了您的问题吗?在C#中查找对象实例的字节大小 - StayOnTarget
3个回答

7
如果你不想在代码本身中实现,根据你的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。)

4

CLR Profiler 是由微软提供的免费工具,非常擅长这种类型的工作。

可以在此处下载整个分析器的介绍 here。同时,Patterns & Practices 团队曾经详细介绍了如何使用该分析器put something

它能够相当合理地展示出不同线程和这些线程中创建的对象。

希望这能为您提供一些帮助。祝您分析愉快!


2

我在使用MemProfiler方面有丰富的经验。它可以给出对象创建时的堆栈跟踪以及所有图形,说明为什么该对象仍未被垃圾回收。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接