【问题标题】:Which PerformanceCounter in "Process" category return memory size for instance of process?“进程”类别中的哪个 PerformanceCounter 返回进程实例的内存大小?
【发布时间】:2016-06-24 17:37:21
【问题描述】:

我编写了监控当前正在运行的进程的应用程序。

在下面的 sn-p 中,我得到了“进程”类别中的所有实例。

   var category = new PerformanceCounterCategory("Process");
   var instanceNames = category.GetInstanceNames();

稍后,我获得了单个实例的所有类别。 看起来像这样。

   var counters = category.GetCounters(instanse);

我看到这个类别中的每个实例都包含 28 个计数器。 在计数器列表下方。

% 处理器时间
% 用户时间
% 特权时间
虚拟字节峰值
虚拟字节
页面错误/秒
工作组峰值
工作集
页面文件字节峰值
页面文件字节
私有字节
线程数
优先基地
已用时间
身份证流程
创建进程 ID
池分页字节
池非分页字节
处理计数
IO 读取操作/秒
IO 写入操作/秒
IO 数据操作/秒
IO 其他操作/秒
IO 读取字节/秒
IO 写入字节/秒
IO 数据字节/秒
IO 其他字节/秒
工作集 - 私有

所以问题。哪个计数器提供有关当前实例占用的内存的信息?
我认为这是一个简单的问题,但我找不到答案。如果有人能告诉我,我将不胜感激。

如果我们假设这个“工作集”:

进程名称:SkypeC2CPNRSvc |进程 ID:2500 进程:
组: 过程 |进程:SkypeC2CPNRSvc |名称:工作集 |值:311296

这个值的计算方式如下:prfc.NextValue()/1024
在此过程的任务管理器中,我看到 316K

【问题讨论】:

标签: c# process performancecounter system.diagnostics


【解决方案1】:

“工作集”。 “Working Set - Private”和“Private Bytes”都是描述当前进程使用的内存的计数器。

您可以查看此链接以对差异进行很好的讨论:

What is private bytes, virtual bytes, working set?

【讨论】:

    【解决方案2】:

    我会使用TraceEvent 来启动Realtime Session 并使用密钥0x40 (KERNEL_MEM_KEYWORD_MEMINFO_EX) 激活提供程序Microsoft-Windows-Kernel-Memory。

    现在 Windows 会每 0.5 秒引发一次事件,并使用这些数据:

    Count, ProcessID, WorkingSetPageCount, CommitPageCount, VirtualSizeInPages, PrivateWorkingSetPageCount
    

    以您需要的方式解析它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      相关资源
      最近更新 更多