gpt4 book ai didi

c# - 提高使用 .NET 枚举文件和文件夹的性能

转载 作者:可可西里 更新时间:2023-11-01 03:13:23 26 4
gpt4 key购买 nike

我有一个包含数千个文件夹的基本目录。在这些文件夹中,可以有 1 到 20 个子文件夹,其中包含 1 到 10 个文件。我想删除所有超过 60 天的文件。我使用下面的代码来获取我必须删除的文件列表:

DirectoryInfo dirInfo = new DirectoryInfo(myBaseDirectory);
FileInfo[] oldFiles =
dirInfo.GetFiles("*.*", SearchOption.AllDirectories)
.Where(t=>t.CreationTime < DateTime.Now.AddDays(-60)).ToArray();

但是我让它运行了大约 30 分钟,但它仍然没有完成。我很好奇是否有人能看到我有可能提高上述行的性能,或者是否有不同的方法我应该完全接近这个以获得更好的性能?有什么建议吗?

最佳答案

这(可能)会达到这样的效果:

DateTime sixtyLess = DateTime.Now.AddDays(-60);
DirectoryInfo dirInfo = new DirectoryInfo(myBaseDirectory);
FileInfo[] oldFiles =
dirInfo.EnumerateFiles("*.*", SearchOption.AllDirectories)
.AsParallel()
.Where(fi => fi.CreationTime < sixtyLess).ToArray();

变化:

  • 减少 60 天的 DateTime 常量,从而减少 CPU 负载。
  • 使用 EnumerateFiles
  • 使查询并行。

应该在更短的时间内运行(不确定如何更小)。

这是另一个解决方案,它可能比第一个更快或更慢,这取决于数据:

DateTime sixtyLess = DateTime.Now.AddDays(-60);
DirectoryInfo dirInfo = new DirectoryInfo(myBaseDirectory);
FileInfo[] oldFiles =
dirInfo.EnumerateDirectories()
.AsParallel()
.SelectMany(di => di.EnumerateFiles("*.*", SearchOption.AllDirectories)
.Where(fi => fi.CreationTime < sixtyLess))
.ToArray();

在这里它将并行性移动到主文件夹枚举。上面的大部分更改也适用。

关于c# - 提高使用 .NET 枚举文件和文件夹的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17756042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com