我需要检查堆中分配了多少内存。有没有一种用C#编程方式来获取这个值的方法?
我知道可以使用System.Runtime.InteropServices.Marshal.SizeOf(...)
来获取对象的大小,但那只会告诉我对象的大小。
我需要检查堆中分配了多少内存。有没有一种用C#编程方式来获取这个值的方法?
我知道可以使用System.Runtime.InteropServices.Marshal.SizeOf(...)
来获取对象的大小,但那只会告诉我对象的大小。
通过使用PerformanceCounter,您可以查询自己的进程以及其他进程中“所有堆中的字节数”,使用类“.Net CLR Memory”可以看到很多可用的计数器。
您需要比较PerformanceCounter和Jon Skeet提出的GC.GetTotalMemory之间在系统负载方面的差异。
GC.GetTotalMemory
能满足您的所有需求吗?(注意,SizeOf
只能告诉您序列化后的大小,并不一定是内存中的大小。)