确定C#中指定进程的磁盘I / O读写数据总量(以字节为单位)?

时间:2019-02-18 17:00:56

标签: c# .net io disk performancecounter

我想确定特定进程的磁盘I / O读取数据以及写入数据的总量(以字节为单位)。

不确定是否可以通过性能计数器来完成此操作,因为当我从MSDN运行this代码示例时,我仅看到这些相关的计数器名称,由于它们是,它们似乎无法检索我所需的信息。以数据/秒为单位,似乎仅用于计算平均值...

  • IO读取操作/秒
  • IO写操作/秒
  • IO数据操作/秒
  • IO其他操作/秒
  • IO读取字节/秒
  • IO写入字节/秒
  • IO数据字节/秒
  • IO其他字节/秒

如果我错了,请向我解释我需要使用哪些计数器以及如何比较它们的值(使用PerformanceCounter.NextValue()PerformanceCounter.NextSample() + {{3} }。

我知道某些任务管理器(例如CounterSample.Calculate())可以检索此信息:

System Explorer

我只是想这样做。

1 个答案:

答案 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);
    ...