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

问题描述 投票:1回答:1

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

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

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

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

我知道这些信息可以被某些任务管理器检索,例如System Explorer

enter image description here

我只想做同样的事情。

c# .net io disk performancecounter
1个回答
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);
    ...
© www.soinside.com 2019 - 2024. All rights reserved.