【问题标题】:Know how fast a Hard Drive is in Delphi在 Delphi 中了解硬盘驱动器的速度
【发布时间】:2011-07-30 08:01:25
【问题描述】:

我正在编写一个诊断程序(如 everest,但更简单),我需要知道硬盘驱动器的速度。我想知道诸如:

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

我想我可以使用 WMI 来查询这样的事情,但我不知道如何。我是否需要购买组件或获取开源组件都没有关系。我也知道 Windows Perfmoon 能够做到这一点,但我不能使用它。

【问题讨论】:

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

标签: delphi winapi wmi hardware hard-drive


【解决方案1】:

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

使用 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) 标志,使对文件句柄的任何写入和读取都可以直接完成而不被缓冲。

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 2011-08-06
    • 2011-06-10
    • 2012-02-08
    • 2012-08-07
    • 2018-01-26
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多