19

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

4

5 回答 5

29

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

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

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

我还没有测试过 Process.PagedMemorySize64,尽管它看起来很有希望。

于 2009-01-21T00:28:16.783 回答
6
Process proc = Process.GetCurrentProcess();
Logger.Info(proc.PeakWorkingSet64/1024 + "kb");
于 2010-04-27T07:51:58.980 回答
2

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

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

于 2009-01-21T00:00:09.947 回答
2

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

没有任何“每个对象”的东西,但至少可以收集一些有关您的进程的内存信息。

于 2009-01-21T00:04:17.130 回答
0

也许

Windows::System::Diagnostics::ProcessDiagnosticInfo::GetForCurrentProcess();
于 2015-12-17T18:03:11.910 回答