c# - 使用 c# 中的性能计数器在给定进程的结果中获取 0 字节
问题描述
我正在创建一个 C# WinForm 应用程序,它将显示给定进程(例如:进程名称)的网络活动(接收的字节数/发送的字节数chrome.exe
)和进程生成的速度(以兆字节/秒为单位)。
我的应用程序使用性能计数器类来获取进程活动,例如IO Read Bytes/sec
接收字节和IO Writes Bytes/sec
发送字节。但是,结果它给了我0 字节,这很奇怪,因为chrome.exe
它正在运行并且它肯定使用了一些字节数据。
我试图找到解决方案的研究是:
- https://stackoverflow.com/a/17026417/5377037
- C# 资源监视器获取网络活动值
- https://www.c-sharpcorner.com/forums/i-want-to-develop-resource-monitor-desktop-application
这是我正在使用的一些代码:
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
解决方案
根据文档:
如果计数器的计算值取决于两次计数器读取,则第一次读取操作返回 0.0。重置性能计数器属性以指定不同的计数器相当于创建一个新的性能计数器,使用新属性的第一次读取操作返回 0.0。调用 NextValue 方法之间的建议延迟时间为一秒,以允许计数器执行下一次增量读取。
推荐阅读
- javascript - 将本地时区时间转换为 UTC
- azure - 如何限制我的 Active Directory 中的人员访问我的网站(Azure 静态网站)?
- python-3.x - 使用python选择下拉列表
- python - 重新排列 keras cnn 的数据框行内容
- php - 如何为其抓取的文件添加文件扩展名
- plot - gnuplot时间过去了可能吗?
- sql-server - 如何在 SSMS 中将 T-SQL SmallDateTime 值转换为 Excel 日期值
- django - 媒体文件未在模板 (HTML ) 中正确加载。静态文件/图像正常工作
- mysql - SELECT COUNT(*) 基于连接表条件
- c - 如何在使用 C 的 Linux 线程中修复“从套接字读取错误 - 文件描述符错误”?