繁体   English   中英

为什么Windows上的文件串联这么慢?

[英]Why is file concatenation on Windows so slow?

我正在开发一个小型实用程序应用程序,以连接大型视频文件。 主要的串联步骤是在Windows 7的命令行上运行以下操作:

copy /b file1.dv + file2.dv + file3.dv output.dv

输入文件很大-通常每个文件7-15GB。 我知道我在这里处理大量数据,但是二进制连接需要很长的时间-总共大约40GB的数据,将近一个小时。

考虑到该过程基本上只是对每个文件的扫描,并将其内容复制到新文件中,为什么二进制副本这么慢?

内置命令copy是在DOS时代设计的,从那以后还没有真正更新过。 因此,它是为具有小磁盘和很小主存储器的计算机设计的。 结果,它在复制内容时使用很小的缓冲区。 对于典型的工作量; 这没什么大不了的,但是对于您要处理的特定情况而言,效果并不理想。

就是说,考虑到您所描述的情况,我认为复制不会进展得这么慢。 如果一个40 GB的文件大约需要一个小时,则意味着您获得的速度约为11 MB / s 像您在评论中描述的那样,典型的商用Dell笔记本电脑通常配备5400 RPM消费型硬盘,在理想的连续读取和读取条件下,它们可以达到30MB / s(磁盘末端)到60MB / s(磁盘开始)之间的速度。写道。 但是,您的工作负载不是顺序工作负载; 这是读/写磁头从源文件到目标文件的恒定偏移。 此类磁盘的典型延迟时间为16ms,每秒大约有60次寻道,或每秒30次复制操作。 这意味着该副本使用的缓冲区大约为11MB / 30 =大约375k,这很方便(在您考虑了copy的代码大小和一些DOS设备驱动程序之后)适合该副本最初设计的640k上限。 所有这些都假定您的磁盘在理想条件下运行,并且具有足够的剩余空间,允许这些读取和写入实际上在复制操作中是顺序的。

当然,如果您同时执行其他任何操作,这将导致更多的查找操作,并且您的性能会更糟。

如果您使用另一个专为大型复制操作设计的应用程序,并且因此使用较大的缓冲区,则可能会得到更好的结果(可能快两倍)。 但是我不知道有任何这样的应用程序。 如果您需要的话,您可能需要自己写一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM