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

时间:2009-01-20 23:55:46

标签: c# runtime memory-management

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

5 个答案:

答案 0 :(得分:29)

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

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

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

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

答案 1 :(得分:6)

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

答案 2 :(得分:2)

你可以监听perfmon计数器,它会为你提供大量数据(GC活动/物理内存使用/托管堆等)。

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:0)

也许

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