![](/img/trans.png)
[英]C# .NET - Is there a way to determine my app's memory usage per class/object type in runtime?
[英]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.