有什么方法可以确定Windows中可移动驱动器的速度?

时间:2008-10-08 15:42:52

标签: c++ windows removable-drive

有没有办法在Windows中确定可移动的驱动器速度而不实际读取文件。如果我必须读取文件,需要读取多少才能获得半精确的速度(例如,确定设备是USB2还是USB1)?

编辑:为了澄清,USB2和USB1就是一个例子。这些可能是Compact Flash,可能是SSD,可能是可移动驱动器。我试图尽快确定这一点,因为它对应用程序的响应性有实际影响。

编辑:还应该澄清,这必须以编程方式完成。它可能是用C ++完成的。

编辑:提升答案是我想要的(虽然我没有在C ++中编写任何WMI)。但我需要知道我必须检查哪些属性来确定相对速度。我不需要准确的速度(就像我说的USB1和USB2之间的速度差异),但我需要知道它是否会是SLLOOOOWWW。

7 个答案:

答案 0 :(得分:2)

您可能有更好的结果查询操作系统以获取有关硬件的信息,而不是尝试从数据传输计时信息中对其进行反向工程。

例如,相同的传输速度并不一定意味着两个设备正在使用相同的技术,但是如果您的应用可以获得此类信息,其他因素(例如搜索时间)将提高准确性。

为了在完成此工作时保持应用程序响应,请尝试异步执行调用并向用户提供某种进度指示器。举个例子,看看WinDirStat如何处理这个进度指示(我喜欢分析每个目录时的pac-man动画)。

答案 1 :(得分:2)

WMI - Physical Disks Properties是我发现的一篇文章,它至少可以帮助您弄清楚您所连接的内容。我预见到桌子上的东西会把特定的制造商和模型等同于速度,这并不像你希望的那样简单。

答案 2 :(得分:0)

几兆字节,我会说。传输速度可以开始缓慢,然后随着传输的进行加速。由于文件大小也存在差异(单个1GB文件的传输速度比1GB的较小文件快得多)。

最好的方法是将文件复制到设备或从设备复制文件,并计算代码所需的时间。 USB1速度是11Mb / s(我认为),USB2是480Mb / s(注意这些是整个总线的数字,而不是每个端口,因此同一总线上的多个设备将改变实际数字)。

答案 3 :(得分:0)

在Windows中,您可以通过选择查看 - >确定连接的USB设备是否为USB2。 “设备管理器中的设备连接”,然后检查设备是否位于USB2控制器(USB2增强型主机控制器)下。

请注意,这并不意味着您的设备实际上会以更高的速度运行,但您仍需要实际的吞吐量测试。 Sisoft Sandra基准测试软件列出了其功能列表中支持的可移动硬盘驱动器。

编辑:由于原始问题的澄清,我提交了一个新答案。

答案 4 :(得分:0)

尝试TerraCopy并将一个大文件〜400mb - 500mb从设备复制到设备,您将看到速度。

答案 5 :(得分:0)

考虑可能影响数据传输速度的事情数量:

  • 用于将设备连接到系统的总线速度。除非通过USB1连接,否则这不太可能成为您的边界因素。
  • 对于硬盘驱动器,转速和寻道时间很重要。 7200 RPM驱动器将比5400 RPM驱动器更快地读写数据块。
  • 光盘驱动器和磁盘驱动器在不使用时通常会降速,因此第一次访问将比第二次访问要多出几个数量级。
  • 特定设备上使用的文件系统。
  • 缓存数据和文件系统元数据。缓存的元数据越少,磁盘或光盘驱动器就越需要设法确定数据的位置。
  • 数据访问模式。访问少量大型连续文件几乎总是比访问分散在磁盘周围的大量小文件更快。
  • 文件系统碎片

您可能会根据您希望看到的设备的各种特性来处理一些启发式算法,但总的来说,没有好办法确定总线,媒体,文件系统和数据的特定组合的传输速度访问模式而不实际测量它。如果您决定进行衡量,请尝试尽可能地模拟您的最终访问模式。

答案 6 :(得分:0)

我要借Raymond Chen's晶球并说你真的不想要这个。您可能希望使用异步I / O.如果您在一秒钟内没有得到I / O的结果,您想要检查发生了多少。取这个数字的倒数,你就可以给用户一个很好的估计。

如果一秒钟后什么也没发生,你可能会感到惊讶。但即使这样也会发生。例如,硬盘可能需要一秒钟才能启动。只需每秒轮询一次,直到事情发生。