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

标签 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);
}

Days().Ago() 只是语法糖。

最佳答案

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

关于c# - C# 中的高性能文件复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1677226/

相关文章:

windows - 当目标路径包含表情符号字符时,复制快捷方式文件(*.lnk)的目标

c# - EF Code First 如何为派生类创建单独的表?

python - 有效地反转和反转 python3.x OrderedDict

performance - 寻找一种可靠的方法来测试移动设备上的 CSS 转换性能

macos - 如何以递归方式复制文件夹并提供进度反馈,同时保留 OS X 上的所有元数据?

C++ 将文件从 Qt 传输到外部 USB 驱动器

c# - 如何获取包含字符串的列表的索引

c# - SharePoint2010中的ConversionJob将docx转换为pdf需要很长时间或非常慢

c# - 什么框架使用 `IServiceProvider` ?

java - 用于几种类型请求的 JMX Bean