我想确定特定进程的磁盘I / O读取数据以及写入数据的总量(以字节为单位)。
不确定是否可以通过性能计数器来完成此操作,因为当我从MSDN运行this代码示例时,我仅看到这些相关的计数器名称,由于它们是,它们似乎无法检索我所需的信息。以数据/秒为单位,似乎仅用于计算平均值...
如果我错了,请向我解释我需要使用哪些计数器以及如何比较它们的值(使用PerformanceCounter.NextValue()或PerformanceCounter.NextSample() + {{3} }。
我知道某些任务管理器(例如CounterSample.Calculate())可以检索此信息:
我只是想这样做。
答案 0 :(得分:2)
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);
...