在我的情况下,我调用file.copy()
将这些小文件(3KB)从不同的目录复制到不同的目录。我将源路径放在list<string>
中。
如何提高复制效果?
我应该使用多线程吗?只是顺序的方式?
答案 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
作为选项。我觉得优点..
由于上面的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)
我认为您应该复制文件异步。请找到以下链接,它将帮助您进行复制文件的异步调用。