繁体   English   中英

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

[英]Poll C# app's memory usage at runtime?

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

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

  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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM