了解Delphi中硬盘的速度

了解Delphi中硬盘的速度,delphi,winapi,wmi,hardware,hard-drive,Delphi,Winapi,Wmi,Hardware,Hard Drive,我正在写一个诊断程序(像珠穆朗玛峰,但更简单),我需要知道硬盘有多快。我想知道一些事情,比如: 1-每秒字节数(读取) 2-每秒字节数(写入) 3-S.M.A.R.T数据 我想我可以使用WMI来查询这样的东西,但我不知道如何查询。我是否需要购买组件或获得开源组件并不重要。我也知道Windows Perfmoon能够做到这一点,但我不能使用它。Rafael要获取S.M.A.R.T数据,可以使用WMI或Windows API 使用WMI 数据是 MSStorage Driver_atapismar

我正在写一个诊断程序(像珠穆朗玛峰,但更简单),我需要知道硬盘有多快。我想知道一些事情,比如:

1-每秒字节数(读取)
2-每秒字节数(写入)
3-S.M.A.R.T数据


我想我可以使用WMI来查询这样的东西,但我不知道如何查询。我是否需要购买组件或获得开源组件并不重要。我也知道Windows Perfmoon能够做到这一点,但我不能使用它。

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

使用WMI

数据是

  • MSStorage Driver_atapismart数据
  • MSStorage Driver_故障预测数据
  • MSStorage Driver\u故障预测状态
  • MSStorage Driver\u故障预测阈值
  • MSStorage驱动程序\u ScsiInfoExceptions
它们都位于
root\WMI
命名空间中。不幸的是,这些类没有很好的文档记录

使用WINAPI

要从Windows API访问S.M.A.R.T数据,需要做更多的工作,必须使用和函数传递相应的结构来保存数据。你可以在网上找到很多这样的样品

计算硬盘速度


没有直接公开此信息的Windows api。所以你必须自己计算。例如,您可以检查包含C++的源代码的应用程序。他们使用
CreateFile
函数设置标志,使对文件句柄的任何写入和读取都可以直接进行,而无需缓冲。

我不知道这个问题的答案,但我认为硬盘驱动器的读取/写入速度对于大文件和小文件是不同的。简单的逻辑是,您应该从HD读取/写入一定数量的数据,然后将数据大小与操作结束和开始之间的时间差(以秒为单位)分开,以分别获得适当的读取/写入速度。对于S.M.A.R.T的数据我不知道。是的,这是一个简单的方法。但是我想windows有一些现成的东西可以使用。windows没有任何内置的东西可以从你的代码中使用,AFAIK。它在Vista/Win7上使用硬盘的性能指标来提供Windows体验索引,但我不知道有哪种API可以从你自己的应用程序连接到它。