C#中的高性能文件复制?

Sco*_*ach 7 c# performance file-copying

我有一个大约500k jpg文件的庞大目录,我想归档所有早于某个日期的文件.目前,该脚本需要数小时才能运行.

这与GoGrid的存储服务器非常糟糕的性能有很大关系,但与此同时,我确信有一种方法可以更有效地实现Ram/Cpu来完成我正在做的事情.

这是我的代码:

var dirInfo = new DirectoryInfo(PathToSource);
var fileInfo = dirInfo.GetFiles("*.*");
var filesToArchive = fileInfo.Where(f => 
    f.LastWriteTime.Date < StartThresholdInDays.Days().Ago().Date
      && f.LastWriteTime.Date >= StopThresholdInDays.Days().Ago().Date
);

foreach (var file in filesToArchive)
{
    file.CopyTo(PathToTarget+file.Name);
}
Run Code Online (Sandbox Code Playgroud)

Days().Ago()的东西只是语法糖.

Tho*_*que 10

我认为你可以改进的唯一部分是dirInfo.GetFiles("*.*").在.NET 3.5及更早版本中,它返回一个包含所有文件名的数组,这需要时间来构建并使用大量RAM.在.NET 4.0中,有一个Directory.EnumerateFiles返回an 的新方法IEnumerable<string>,并在从磁盘读取结果时立即获取结果.这可以提高性能,但不要指望奇迹......