如何在高性能中复制大量小文件?

时间:2013-12-02 06:14:49

标签: c# performance copy

在我的情况下,我调用file.copy()将这些小文件(3KB)从不同的目录复制到不同的目录。我将源路径放在list<string>中。

如何提高复制效果?
我应该使用多线程吗?只是顺序的方式?

4 个答案:

答案 0 :(得分:2)

我不确定如何强制性能进入问题,因为复制文件是由Windows处理的,您将受到所拥有硬件的限制,例如您使用的存储类型(磁盘或SSD) ),您拥有的连接类型(LAN / USB 2.0或3.0 /等)。

据说,无论情况如何,异步文件副本都可能最适合您想要做的事情。最好的资源是MSDN上的Asynchronous File I/O引用。

答案 1 :(得分:0)

C# how to copy **big amount of small files in high performance**?”。

你的问题代码不多,所以我给你一个解决问题的方向(帮助网址)..

我建议使用Zipping作为选项。我觉得优点..

  1. 压缩尺寸。
  2. 文件缩小为单个zip文件。
  3. 由于上面的n / w复制变得更快......

    NOTE:对于.Net 4.5,您可以继续使用ZipFile,在此之前您可能需要使用GZip or Deflate压缩算法

    MSDN网址 - http://msdn.microsoft.com/en-us/library/ms404280(v=vs.110).aspx

答案 2 :(得分:0)

将它们以大块(例如,每次1GB)读入内存并将其写出来可能会有一些优势。这可以允许它们顺序地写入磁盘而不必来回移动磁盘头。

另请考虑使用here所述的更灵活的CopyFileEx API。它允许您指定NoBuffering以避免使用您不关心的文件填充缓存,并提供异步模式,取消和进度报告。

答案 3 :(得分:-1)

我认为您应该复制文件异步。请找到以下链接,它将帮助您进行复制文件的异步调用。

Asynchronous Programming Techniques