首页 > 解决方案 > 使用 c# 中的性能计数器在给定进程的结果中获取 0 字节

问题描述

我正在创建一个 C# WinForm 应用程序,它将显示给定进程(例如:进程名称)的网络活动(接收的字节数/发送的字节数chrome.exe)和进程生成的速度(以兆字节/秒为单位)。

我的应用程序使用性能计数器类来获取进程活动,例如IO Read Bytes/sec接收字节和IO Writes Bytes/sec发送字节。但是,结果它给了我0 字节,这很奇怪,因为chrome.exe它正在运行并且它肯定使用了一些字节数据。

我试图找到解决方案的研究是:

这是我正在使用的一些代码:

PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "Process";
PC.CounterName = "IO Read Bytes/sec";
PC.InstanceName = "chrome";
PC.ReadOnly = true;

Console.WriteLine("Bytes Receieved: " + Math.Round(PC.NextValue()));
PC.CounterName = "IO Write Bytes/sec";
Console.WriteLine("Bytes Sent: " + Math.Round(PC.NextValue()));

结果:

Bytes Received: 0
Bytes Sent: 0

标签: c#.netperformancecounter

解决方案


根据文档

如果计数器的计算值取决于两次计数器读取,则第一次读取操作返回 0.0。重置性能计数器属性以指定不同的计数器相当于创建一个新的性能计数器,使用新属性的第一次读取操作返回 0.0。调用 NextValue 方法之间的建议延迟时间为一秒,以允许计数器执行下一次增量读取。


推荐阅读