Узнайте, как быстро работает жесткий диск в Delphi - PullRequest
8 голосов
/ 06 апреля 2011

Я пишу программу диагностики (например, Everest, но проще), и мне нужно знать, насколько быстрым является HardDrive.Я хочу знать такие вещи, как:

1 - байт в секунду (чтение)
2 - байт в секунду (запись)
3 - данные SMART

Я думаю, я могу использоватьWMI, чтобы запросить такую ​​вещь, но я понятия не имею, как.Неважно, если мне нужно купить компонент или получить с открытым исходным кодом.Я также знаю, что Windows Perfmoon может это сделать, но я не могу его использовать.

1 Ответ

11 голосов
/ 06 апреля 2011

Рафаэль, чтобы получить SMART-данные, вы можете использовать WMI или Windows API.

, используя WMI

WMI classes to obtain S.M.A.R.Tданные:

  • MSStorageDriver_ATAPISmartData
  • MSStorageDriver_FailurePredictData
  • MSStorageDriver_FailurePredictStatus
  • MSStorageDriverрасположены в пространстве имен root\WMI.к сожалению, эти классы не очень хорошо документированы.

    с использованием WINAPI

    Для доступа к данным SMART из Windows API требуется немного больше работы, вы должны использоватьФункции DeviceIoControl и CreateFile передают соответствующие структуры для хранения данных.Вы можете найти множество образцов этого в net .

    Для расчета скорости жесткого диска

    не существует API-интерфейса Windows, который бы непосредственно отображал эту информацию.поэтому вы должны рассчитать это сами.Например, вы можете проверить это приложение DISKSPEED, которое включает исходный код на C ++.они используют функцию CreateFile, устанавливающую флаг FILE_FLAG_NO_BUFFERING ($20000000), чтобы любые записи и чтения, сделанные в дескриптор файла, выполнялись напрямую, без буферизации.

...