c# - 进程内存大小 - 不同的计数器

标签 c# .net memory process diagnostics

我正在尝试找出我自己的 .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/

相关文章:

c# - 区域布局忽略的环境变量

c# - 如何使面板控件显示在所有其他控件下方?

c# - 延迟 Windows 注销(XP、Vista 和 7)

c - 用户空间虚拟内存地址范围

iOS - 内存泄漏地址簿

javascript - 语法错误: Unexpected token in JSON at position 0

c# - 在 nHibernate QueryOver<T> 期间无法比较字符串

c# - 关于 C# 中 Thread.Sleep() 2 小时的问题

c# - .NET Framework 是否提供解析 HTML 字符串的方法?

c++ - 静态变量情况下的内存分配