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>,并在从磁盘读取结果时立即获取结果.这可以提高性能,但不要指望奇迹......
虽然 .NET 4.0 提供了惰性Directory.EnumerateFiles,但您现在可以在 .NET 3.5 上执行此操作: