4

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

编辑:澄清一下,USB2 和 USB1 就是一个例子。这些可能是紧凑型闪存,可能是 SSD,可能是可移动驱动器。我正在尝试尽快确定这一点,因为它对应用程序的响应能力有实际影响。

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

编辑:提升答案是我一直在寻找的(尽管我没有用 C++ 编写任何 WMI)。但我需要知道我必须检查哪些属性才能确定相对速度。我不需要确切的速度(就像我所说的 USB1 和 USB2 之间的速度差异),但我需要知道它是否会是 SLLOOOOWWW。

4

7 回答 7

2

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

例如,相同的传输速度并不一定意味着两个设备正在使用相同的技术,尽管如果您的应用程序可以使用此类信息,其他因素(例如寻道时间)会提高准确性。

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

于 2008-10-08T16:37:58.543 回答
2

WMI - Physical Disks Properties是我发现的一篇文章,它至少可以帮助你弄清楚你连接了什么。我预见事情会朝着将特定制造商和型号等同于速度的表格发展,这并不像您希望的那样简单。

于 2008-10-09T14:04:05.623 回答
0

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

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

于 2008-10-08T16:09:05.717 回答
0

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

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

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

于 2008-10-08T16:17:32.720 回答
0

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

于 2008-10-08T16:23:32.740 回答
0

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

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

您可能能够根据您期望看到的设备的各种特征进行一些启发式方法,但一般来说,没有好的方法可以确定总线、媒体、文件系统和数据访问模式的特定组合的传输速度实际测量它。如果您决定进行测量,请尝试尽可能接近地模拟您的最终访问模式。

于 2008-10-08T17:23:53.117 回答
0

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

如果一秒钟后没有发生任何事情,您可能会感到惊讶。但即使这样也可能发生。例如,硬盘可能需要一秒钟才能启动。每秒轮询一次,直到发生某些事情。

于 2008-10-10T15:21:28.483 回答