Определить общий объем чтения / записи данных ввода-вывода на диске (в байтах) для указанного процесса в C #? - PullRequest
0 голосов
/ 18 февраля 2019

Я хотел бы определить общий объем данных чтения с дискового ввода-вывода, а также записать данные (в байтах) для определенного процесса.

Не уверен, что это можно сделать с помощью счетчиков производительности, потому что когдаЯ запускаю этот пример кода из MSDN. Я вижу только эти связанные имена счетчиков, которые, кажется, не в состоянии извлечь нужную мне информацию, поскольку они находятся в данных в секунду, что, кажется, служит только для вычисления среднего значения...

  • Операции чтения ввода-вывода / сек
  • Операции записи ввода-вывода / сек
  • Операции ввода-вывода данных / сек
  • Другие операции ввода-вывода / сек
  • Байт считывания ввода-вывода / сек
  • Байт записи ввода-вывода / сек
  • Байт данных ввода-вывода / сек
  • Другие байты ввода-вывода / сек

В случае, если я ошибаюсь, пожалуйста, объясните мне, какие из этих счетчиков мне нужно использовать и как мне нужно сравнить их значения (используя PerformanceCounter.NextValue () или PerformanceCounter.NextSample () + CounterSample.Calculate () ).

Я знаю, что эта информация может быть получена некоторыми диспетчерами задач, такими как System Explorer :

enter image description here

Я просто хотел бы сделать то же самое.

1 Ответ

0 голосов
/ 19 февраля 2019

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