我正在尝试找出我自己的 .Net 服务器进程正在使用多少内存(用于监控和记录目的)。
我正在使用:
Process.GetCurrentProcess().PrivateMemorySize64
不过,Process 对象有几个不同的属性,可以让我读取使用的内存空间: 分页、非分页、分页系统、非分页系统、私有(private)、虚拟、工作集
然后是“峰值”:我猜它只是存储这些最后一个所取的最大值。
阅读每个属性的 MSDN 定义对我来说并没有太大帮助。我不得不承认,我对内存管理方式(就分页和虚拟而言)的了解非常有限。
所以我的问题显然是“我应该使用哪一个?”,而我知道答案是“视情况而定”。
这个进程基本上会保存一堆列表来内存正在发生的事情,而其他进程与之通信并查询它的东西。我预计将在其中运行的服务器需要大量 RAM,因此我会随着时间的推移查询这些数据,以便与它保存在其中的列表的大小相比,能够估计 RAM 需求。
那么...我应该使用哪一个?为什么?
最佳答案
如果你想知道 GC 使用了多少试试:
GC.GetTotalMemory(true)
如果您想知道您的进程在 Windows 中使用了什么(TaskManager 中的 VM 大小列),请尝试:
Process.GetCurrentProcess().PrivateMemorySize64
如果您想知道您的进程在 RAM 中(而不是在页面文件中)(TaskManager 中的内存使用列),请尝试:
Process.GetCurrentProcess().WorkingSet64
见 here有关不同类型内存的更多说明。
关于c# - 进程内存大小 - 不同的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31096/