我如何与xcopy的速度相媲美?

Ben*_*n L 6 windows smb file-io

是否有一个开源项目或最佳实践指南显示了在本地机器,lan,san和wan上复制文件的最快方法,可以与Windows7(或8)或windows的内置xcopy的速度相媲美资源管理器副本?

说实话,并非所有文件IO都是相同的.某些协议和技术存在不同的开销.某些库不利用异步操作或利用硬件的线速度.

我正在清点我们使用的大数据传输,并试图评估我们的客户端应用程序和外部供应商的应用程序的有效性.某些服务器应用程序是最严重的违规者(基于java的是最糟糕的).

我将这项研究的范围限制在SMB 2和3(Windows7和8上的cif).

  • 使用POSIX库的速度是否有缺点.(fread,fopen,fseek等)
  • 使用win32调用有什么好处(CopyFile2,ReadFileEx)

Sam*_*eff 2

xcopy实际上并不是复制文件的最快方法,尤其是跨磁盘或跨本地网络。有一种名为TeraCopy的商业产品速度要快得多。它是闭源的,所以我不完全知道它是如何工作的,但主要区别之一是,它不是使用单个循环将一大块数据读取到内存缓冲区,然后将该缓冲区写入新位置,而是使用两个线程和一个生产者/消费者队列。

生产者读取源文件的块并将它们放入队列中。消费者从队列中读取并写入目标。这里的优点是读和写可以同时进行。不过,您确实需要小心,让生产者密切关注队列大小,不要让队列太大而占用太多内存——通常读取会比写入快,但这也取决于源和目标地点。