2010-07-26 16 views
1

有没有办法为了调试目的而获得所有我的对象所需RAM的列表。子对象等写入到文本文件?C#:一个包含所有子对象的对象需要多少内存?获取对象所需RAM的列表?

我需要得到这些值没有视觉工作室运行在生产模式下运行时。例如每x分钟。这可能吗?我怎样才能做到这一点?

非常感谢你提前,

克里斯

+0

序列化,看看没有。的字节。 – Zaki 2010-07-26 12:40:30

+0

并非所有对象都是可序列化的。 – Chris 2010-07-26 12:41:40

+1

有你看着http://www.microsoft.com/downloads/details.aspx?FamilyId=A362781C-3870-43BE-8926-862B40AA0CD0&displaylang=en,http://memprofiler.com/和http:// WWW。 red-gate.com/products/ants_memory_profiler/index.htm – Zaki 2010-07-26 12:46:51

回答

1

您可以使用JetBrains公司DotTrace做内存分析。它只有30天的试用期,但是通过特定的内存中对象进行导航是一个很好的工具。

0

您可以创建一个工具,将监视进程的大小。
或者在运行应用程序的单独线程中执行此操作。 Process.GetProcessesByName()...

+0

但我需要每个对象的内存,而不是整个过程。例如,对象a(包含b和c)使用200MB,b使用150MB,c使用50MB。 – Chris 2010-07-26 12:39:15

0

对于值类型,你应该能够使用sizeof()。尽管如此,我认为不存在对于参考类型的等同物。请注意,您只能在不安全块内使用sizeof()。

2

负载WinDBG的和负载sos.dll,和附加到进程。

日志然后输出到文件 做!DumpHeap -stat(和变体)

psscor2.dll可以转储堆到一个XML文件。 (或一个与ClrProfiler使用)