当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在运行时轮询C#app的内存使用情况?》经验,为你挑选了2个好方法。

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



1> Jim Mischel..:

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

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

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

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


我不确定`Process.PagedMemorySize64`何时有用,但它在我的情况下并没有真正起作用.我在实例化一堆对象并运行解析器之前/之后执行比较,而PagedMemorySize64在之前和之后报告相同的值,而`GC.GetTotalMemory(true)`似乎更有效地报告内存使用的变化.
@SteveWortham缓存各种进程属性(例如,PagedMemorySize64),因此只需再次访问它们就不会为您提供新值.Process.Refresh()旨在吹走缓存并获取新数字,但我发现它不起作用.但是,实际上每次创建一个新的Process对象(System.Diagnostics.Process.GetCurrentProcess())都可以.不理想,但确实有效.

2> 小智..:
Process proc = Process.GetCurrentProcess();
Logger.Info(proc.PeakWorkingSet64/1024 + "kb");

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有