在windows中确定可移动驱动器速度的任何方法

Any way to determine speed of a removable drive in windows?

本文关键字:速度 任何 方法 驱动器 可移动 windows      更新时间:2023-10-16

是否有任何方法可以在不实际读取文件的情况下确定Windows中的可移动驱动器速度。如果我必须读取文件,需要读取多少才能获得半准确的速度(例如,确定设备是USB2还是USB1)?

编辑:只是澄清一下,USB2和USB1就是一个例子。这些可以是Compact Flash,可以是SSD,可以是可移动驱动器。我正在努力尽快确定这一点,因为它会对应用程序的响应性产生真正的影响。

编辑:还应澄清,这必须通过程序进行。它可能会在C++中完成。

EDIT:Boost答案正是我想要的(尽管我还没有用C++编写任何WMI)。但我需要知道我必须检查哪些属性才能确定相对速度。我不需要确切的速度(就像我说的USB1和USB2之间的速度差异),但我需要知道它是否会是SLLOOOWWW。

WMI-物理磁盘属性是我发现的一篇文章,它至少可以帮助你弄清楚你连接了什么。我预计事情会朝着将特定制造商和型号等同于速度的方向发展,这并不是你所希望的那么简单的解决方案。

查询操作系统以获取有关硬件的信息可能会得到更好的结果,而不是试图根据数据传输时序信息对其进行逆向工程。

例如,相同的传输速度并不一定意味着两个设备使用相同的技术,尽管如果您的应用程序可以获得这些信息,搜索时间等其他因素会提高准确性。

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

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

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

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

在Windows中,您可以通过选择View->quot;连接设备";从设备管理器,然后检查设备是否在USB2控制器(USB2增强型主机控制器)下。

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

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

考虑可能影响数据传输速度的因素:

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

您可能能够根据您期望看到的设备的各种特性制定一些启发式方法,但通常情况下,如果不实际测量总线、介质、文件系统和数据访问模式的特定组合,就无法计算出传输速度。如果您决定测量,请尽可能模拟您的最终访问模式。

我要借用陈的水晶球,说你真的不想要这个。您可能想要使用异步I/O。如果你没有在一秒钟内得到I/O的结果,你需要检查发生了多少。取这个数字的倒数,你就可以很好地向用户报价。

如果一秒钟后什么都没发生,你可能会大吃一惊。但即便如此,也有可能发生。例如,硬盘可能需要一秒钟的时间才能启动。只要每隔一秒进行一次民意调查,直到有什么事情发生。

相关文章: