在windows中确定可移动驱动器速度的任何方法
Any way to determine speed of a removable drive in windows?
是否有任何方法可以在不实际读取文件的情况下确定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的结果,你需要检查发生了多少。取这个数字的倒数,你就可以很好地向用户报价。
如果一秒钟后什么都没发生,你可能会大吃一惊。但即便如此,也有可能发生。例如,硬盘可能需要一秒钟的时间才能启动。只要每隔一秒进行一次民意调查,直到有什么事情发生。
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何在不产生任何垃圾的情况下获得C中的像素
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- C++映射有2个键,这样任何1个键都可以用来获取值
- 文件系统:复制功能的速度秘诀是什么
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- RtlCaptureStackBackTrace未捕获任何帧
- 链表c++插入,所有情况都已检查,但没有任何工作
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- C++模板函数,用于比较任何无符号整数和有符号整数
- Arduino millis() - millis() 怎么能等于 0 以外的任何东西?
- QTcpSocket每~0.5s才读取一次数据,即使是非常小的数据包,任何方法都可以加快速度
- c++快板绘图精灵(即使没有任何循环)减慢图像速度
- "std::map with mutexes"与并行插入、查找、擦除之间是否有任何速度测试"libcds maps (Michael Hashmap and Split Order List)"?
- 关于为什么新代码会减慢光线跟踪器的速度的任何想法
- 当使用成员超过函数变量时,在优化/速度方面有任何差异吗?
- 在windows中确定可移动驱动器速度的任何方法