我想确定磁盘I / O读取数据的总量,并为特定进程写入数据(以字节为单位)。
不确定这是否可以通过性能计数器来完成,因为当我从MSDN运行this代码示例时,我只看到这些相关的计数器名称似乎无法检索我需要的信息,因为它们处于数据/秒似乎仅用于计算平均值...
如果我错了,那么请解释一下我需要使用哪些计数器以及如何比较它们的值(使用PerformanceCounter.NextValue()或PerformanceCounter.NextSample() + CounterSample.Calculate())。
我知道这些信息可以被某些任务管理器检索,例如System Explorer:
我只想做同样的事情。
GetProcessIoCounters()
是Perf计数器/ WMI的简明替代品。
struct IO_COUNTERS {
public ulong ReadOperationCount;
public ulong WriteOperationCount;
public ulong OtherOperationCount;
public ulong ReadTransferCount;
public ulong WriteTransferCount;
public ulong OtherTransferCount;
}
...
[DllImport(@"kernel32.dll", SetLastError = true)]
static extern bool GetProcessIoCounters(IntPtr hProcess, out IO_COUNTERS counters);
...
if (GetProcessIoCounters(Process.GetCurrentProcess().Handle, out IO_COUNTERS counters)) {
Console.WriteLine(counters.ReadOperationCount);
...