如何在C或C++中编程确定一个指定的路径是否在闪存(SSD)驱动器或磁性硬盘驱动器上?我只对固定驱动器感兴趣,对可移动驱动器不感兴趣,不过确定可移动驱动器的类型也不错。
我可以找到获取指定结束路径的根卷路径的方法,以及获取此卷的guid的方法,但我找不到查询此卷硬件特征的方法。

最佳答案

鉴于操作人员在回答我的评论时所说的话,我don't think this is the right question
相反,这里真正重要的是seek time和包含要加载的图像的磁盘的延迟(见上面的注释)。
当然,ssd没有寻道时间或等待时间,因此并行(在单独的线程中)解码多个图像以充分利用cpu是值得的。但是op告诉我们,这样做会导致传统硬盘的性能下降,可能是因为磁盘磁头到处跳跃,试图让所有解码线程都有数据。
那么,你能拥有两个世界中最好的吗?你能在不损坏磁盘的情况下充分利用CPU吗?嗯,我想是的。我要做的是让一个线程一次一个地将图像读入内存,以保持磁盘的正常运行。
但这个线程应该只读取“原始”图像数据。任何进一步的处理都应该划分为若干个“工作”线程(确切的数量应该限制在机器拥有的逻辑处理器的数量上),以便可以并行完成。然后它应该在任何类型的磁盘上运行lickety split。
这就是我要说的。OP,您有一点排队/调度架构需要设计,但这是值得的。
如果您只想在Windows上运行此项,请检查ThreadPool,或考虑使用std::async(与C++标准相反,它是建立在线程池的顶部,并提供良好的C++逐值语义)。
否则,请查看C++ Thread support library
编辑:这对op来说显然是一项相当大的工作,请参阅评论,所以,短期建议,找到一些让磁盘发出嘎嘎声的方法,测量经过的时间,以决定是并行加载图像还是一次一个地处理图像。
只需并行加载几个图像就可以了。在开发过程中,在hdd和ssd上都测量这个值,然后就可以确定一个(硬编码)值作为阈值。
注意:执行此操作时,请使用FILE_FLAG_NO_BUFFERING打开文件,否则磁盘缓存可能会对您不利。
很抱歉我在那儿说教。有时候需要,我知道。

关于c++ - 如何确定文件或文件夹是否在SSD或硬盘上?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50946992/

10-14 15:59