首页 / 知识

关于性能:找出C#中的对象正在使用多少内存?

2023-04-15 05:40:00

关于性能:找出C#中的对象正在使用多少内存?

Find out how much memory is being used by an object in C#?

有人知道一种对象实例占用多少内存的方法吗?

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

1
TestClass tc = new TestClass();

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

提出问题的原因是,尽管C#内置了内存管理功能,但我经常遇到无法清除对象实例(例如,跟踪某些内容的列表)的问题。

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


如果您不打算在代码本身中进行此操作(我根据您的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(zh-cn).aspx

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


微软免费提供的CLR Profiler在这类事情上做得很好。

整个分析器的介绍可在此处下载。 Patterns&Practices团队还将一些东西放在一起,详细说明了如何使用事件探查器。

在向您显示不同的线程和在这些线程中创建的对象时,它做得相当合理。

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


我在MemProfiler方面有很好的经验。它为您提供了有关何时创建对象的堆栈跟踪信息以及为什么仍未进行垃圾回收的原因的所有图表。


对象内存性能方法

最新内容

相关内容

猜你喜欢