【问题标题】:How do I rival the speed of xcopy?我如何与 xcopy 的速度相媲美?
【发布时间】:2012-07-16 14:32:45
【问题描述】:

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

说白了,并不是所有的文件 IO 都是一样的。在某些协议和技术中有不同的开销。一些库没有利用异步操作或利用硬件的线速。

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

我将这项研究的范围限制在 SMB 2 和 3(windows7 和 8 上的 cifs)。

  • 使用 POSIX 库的速度是否存在劣势。 (fread、fopen、fseek 等)
  • 使用 win32 调用(CopyFile2、ReadFileEx)有什么好处

【问题讨论】:

  • 看起来 xcopy 使用了一个未记录的 API 函数 PrivCopyFileExW。但是,记录在案的 CopyFileEx 的执行可能非常相似。

标签: windows file-io smb


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2011-03-17
    • 1970-01-01
    • 2022-11-15
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多