2011-04-05 68 views
8

我正在寫一個診斷程序(比如珠穆朗瑪峯,但更簡單),我需要知道HardDrive的速度有多快。我想知道的東西,如:知道硬盤驅動器在Delphi中的速度有多快

1 - 字節每秒(讀)
2 - 字節每秒(寫)
3 - SMART數據

我想我可以使用WMI詢問這樣的事情,但我不知道如何。無論我需要購買組件還是獲得開源組件都無關緊要。我也知道Windows Perfmoon能夠做到這一點,但我無法使用它。

+1

我沒有對這個問題的答案,但我認爲硬盤的讀寫速度對於大文件和小文件是不一樣的。簡單的邏輯表示,您應該從/向HD讀取/寫入一定數量的數據,然後將數據的大小與操作結束和開始之間的時間差(以秒爲單位)分開以分別獲得正確的讀取/寫入速度。對於S.M.A.R.T數據我不知道。 – Wh1T3h4Ck5 2011-04-05 21:37:36

+0

是的,這是一個簡單的方法。但我猜窗戶有東西可以使用。 – 2011-04-05 22:07:16

+0

Windows沒有內置任何內容,您可以使用您的代碼AFAIK。它使用硬盤性能來給Windows Vista/Win7上的Windows體驗索引,但我不知道有任何API可以連接到你自己的應用程序。 – 2011-04-05 22:31:12

回答

11

Rafael可以使用WMI或Windows API獲取S.M.A.R.T數據。

使用WMI

WMI classes to obtain S.M.A.R.T數據是

  • MSStorageDriver_ATAPISmartData
  • MSStorageDriver_FailurePredictData
  • MSStorageDriver_FailurePredictStatus
  • MSStorageDriver_FailurePredictThresholds
  • MSStorageDriver_ScsiInfoExceptions

所有位於root\WMI命名空間。不幸的是這些課程沒有很好的記錄。

使用WINAPI

要從Windows API訪問數據S.M.A.R.T需要更多一點的工作,你必須使用DeviceIoControlCreateFile功能通過各自的結構來保存數據。你可以在net上找到很多這樣的例子。

要計算的硬盤

速度沒有一個Windows API直接公開此信息。所以你必須計算你的自我。舉個例子,你可以檢查這個應用程序DISKSPEED,它包括C++中的源代碼。他們使用CreateFile函數設置FILE_FLAG_NO_BUFFERING ($20000000)標誌,使得對文件句柄的任何寫入和讀取都可以直接完成,而不需要進行緩衝。

+0

一如既往,感謝RRUZ。你是那個人。 – 2011-04-06 12:47:10