Получить активность жесткого диска через DeviceIOControl (WinAPI)
Мне нужно отображать файловую активность ввода/вывода диска в своем приложении. Отсюда вопрос.
Из чего складывается показатель активности диска (активное время) как в Диспетчере задач?
Знаю что эти данные берутся из структуры DISK_PERFORMANCE в DeviceIoControl, но в документации мне не ясно, откуда и как вычислить этот показатель.
Чтобы было более понятно о чем я, прикладываю скрин.

Ответы (1 шт):
Автор решения: Blackmeser
→ Ссылка
#r "System.Management"
using System.Management;
char driveLetter = 'C';
var path = $"Win32_PerfFormattedData_PerfDisk_PhysicalDisk.Name='0 {driveLetter}:'";
var wmiObj = new ManagementObject(path);
wmiObj.Properties.Cast<PropertyData>()
.ToDictionary(p => p.Name, p => p.Value)
.ToList()
.ForEach(a => WriteLine($"{a.Key}\t{a.Value}"));
Мой вывод:
AvgDiskBytesPerRead 0
AvgDiskBytesPerTransfer 161280
AvgDiskBytesPerWrite 161280
AvgDiskQueueLength 0
AvgDiskReadQueueLength 0
AvgDisksecPerRead 0
AvgDisksecPerTransfer 0
AvgDisksecPerWrite 0
AvgDiskWriteQueueLength 0
Caption
CurrentDiskQueueLength 0
Description
DiskBytesPersec 646075
DiskReadBytesPersec 0
DiskReadsPersec 0
DiskTransfersPersec 4
DiskWriteBytesPersec 646075
DiskWritesPersec 4
Frequency_Object
Frequency_PerfTime
Frequency_Sys100NS
Name 0 C:
PercentDiskReadTime 0
PercentDiskTime 1
PercentDiskWriteTime 1
PercentIdleTime 98
SplitIOPerSec 0
Timestamp_Object
Timestamp_PerfTime
Timestamp_Sys100NS
Нужный вам параметр: PercentDiskTime
Взято отсюда: https://stackoverflow.com/questions/36977903/how-can-we-get-disk-performance-info-in-c-sharp