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

Determine total amount of disk I/O read and write data (in bytes) for specified process in C#?

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

不确定这是否可以通过性能计数器完成,因为当我 运行 this 来自 MSDN 的代码示例时,我只看到这些似乎无法检索信息的相关计数器名称我需要,因为它们在 data/sec 中,似乎仅用于计算平均值...

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

我知道一些任务管理器可以检索到此信息,例如 System Explorer:

我也想这样做。

GetProcessIoCounters() 是 Perf counters/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);
    ...