了解在Delphi中硬盘速度有多快

9
我正在编写一个诊断程序(类似于everest,但更简单),我需要知道硬盘的速度。我想知道以下信息:
1 - 每秒读取的字节数
2 - 每秒写入的字节数
3 - S.M.A.R.T数据
我猜我可以使用WMI查询这些信息,但我不知道如何操作。无论是购买组件还是获取开源组件都没关系。我也知道Windows Perfmoon能够完成这个任务,但我不能使用它。

1
我没有这个问题的答案,但我认为硬盘的读写速度对于大文件和小文件并不相同。简单的逻辑表明,您应该从/到硬盘读/写一定量的数据,然后将数据大小除以操作结束和开始之间的时间差(以秒为单位),以获得适当的读/写速度。至于S.M.A.R.T数据,我没有任何想法。 - Wh1T3h4Ck5
是的,那是一种简单的方法。但我想Windows应该有现成的解决方案。 - Rafael Colucci
据我所知,Windows没有内置任何可供您在代码中使用的东西。它使用性能工具来为Vista/Win7上的硬盘提供Windows体验指数,但我不知道是否有任何API可以连接到您自己的应用程序。 - Ken White
1个回答

13

Rafael,要获取S.M.A.R.T数据,您可以使用WMI或Windows API。

使用WMI

用于获取S.M.A.R.T数据的WMI类包括:

  • MSStorageDriver_ATAPISmartData
  • MSStorageDriver_FailurePredictData
  • MSStorageDriver_FailurePredictStatus
  • MSStorageDriver_FailurePredictThresholds
  • MSStorageDriver_ScsiInfoExceptions

它们都位于root\WMI命名空间中。不幸的是,这些类的文档记录不太充分。

使用Windows API

要从Windows API访问S.M.A.R.T数据需要更多的工作,您必须使用DeviceIoControlCreateFile函数,并传递持有数据的相应结构。您可以在网络上找到这方面的很多示例。

计算硬盘速度

没有Windows API可以直接公开此信息,因此您必须自己计算。例如,您可以查看这个应用程序DISKSPEED,其中包括C++源代码。他们使用CreateFile函数设置FILE_FLAG_NO_BUFFERING($20000000)标志,使任何写入和读取文件句柄的操作直接进行,而不是缓冲。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接