在运行时轮询C#app的内存使用情况?

我有一个应用程序,在运行时,需要轮询自己的内存使用情况。 如果它可以列出实例化的每个对象的内存使用情况,那将是理想的。 我知道这可以通过WMI实现,但我希望有一些不依赖于WMI的东西。

您可能会发现两个有用的function:

GC.GetTotalMemory(); Process.PagedMemorySize64(); 

我的经验是GC.GetTotalMemory()不是非常可靠。 它通常报告的内存使用量远远小于实际内存使用量。 我已经看到它报告说当我的程序在16 GB的机器上耗尽时,我只使用8 GB。

我还没有测试过Process.PagedMemorySize64,虽然看起来很有前景。

 Process proc = Process.GetCurrentProcess(); Logger.Info(proc.PeakWorkingSet64/1024 + "kb"); 

您可以监听perfmon计数器,这将为您提供大量数据(GC活动/物理内存使用/托管堆等…)

如果你需要更深入,你可能需要为自己附加一个调试器,这实在是非常棘手,因为你必须生成一个新的进程并与之通信,并遍历你的记忆。

您可以从System.Diagnostics(Process类)获得有关流程的粗略粒度。 http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

没有’每个对象’的东西,但至少有一些关于你的过程的内存信息可以收集。

也许

 Windows::System::Diagnostics::ProcessDiagnosticInfo::GetForCurrentProcess();