删除目录中文件的最快方法是什么? (特定文件扩展名除外)
我见过类似的问题 清空目录的最佳方法是什么?
但我需要知道,
删除目录中找到的所有文件(找到的任何 .zip
文件除外)的最快方法是什么。
这里闻起来像 linq...还是什么?
我所说的最快方式是指最快的执行时间。
I have seen questions like What is the best way to empty a directory?
But I need to know,
what is the fastest way of deleting all the files found within the directory, except any .zip
files found.
Smells like linq here... or what?
By saying fastest way, I mean the Fastest execution time.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您使用 .NET 4,您可以受益于 .NET 现在并行化您的功能的智能方式。此代码是执行此操作的快速方法。这也随着处理器上的核心数量而变化。
If you are using .NET 4 you can benifit the smart way .NET now parallizing your functions. This code is the fasted way to do it. This scales with your numbers of cores on the processor too.
所谓最快,是指最少的代码行数还是最快的执行时间?下面是一个使用 LINQ 与每个循环并行来快速删除它们的示例。
By fastest are you asking for the least lines of code or the quickest execution time? Here is a sample using LINQ with a parallel for each loop to delete them quickly.
在撰写此答案时,之前的答案都没有使用 Directory.EnumerateFiles() ,它允许您在构建列表时对文件列表进行操作。
代码:
据我所知,在这种情况下使用 AsParallel() 的性能增益应该不显着(如果找到),但它确实对我的情况产生了影响。
我比较了使用 1-foreach 删除 4689 个文件列表中除 .zip 文件之外的所有文件所需的时间,其中 10 个是 zip 文件。 2-并行foreach。 3-IEnumerable().AsParallel().ForAll。使用 IEnumerable().AsParallel() 的 4 并行 foreach,如上所示。
结果:
1-1545
2-1015
3-1103
4-839
第五种也是最后一种情况是使用 Directory.GetFiles()
5-2266 的
正常 foreach ,当然,据我所知,结果并不是决定性的正确的基准测试您需要使用 RAM 驱动器而不是 HDD 。
注意:随着文件数量的增加,EnumerateFiles 和 GetFiles 之间的性能差异变得更加明显。
At the time of writing this answer none of the previous answers used Directory.EnumerateFiles() which allows you to carry on operations on the list of files while the list is being constructed .
Code:
as far as I know the performance gain from using AsParallel() shouldn't be significant(if found) in this case however it did make difference in my case.
I compared the time it takes to delete all but .zip files in a list of 4689 files of which 10 were zip files using 1-foreach. 2-parallel foreach. 3-IEnumerable().AsParallel().ForAll. 4-parallel foreach using IEnumerable().AsParallel() as illustrated above.
Results:
1-1545
2-1015
3-1103
4-839
the fifth and the last case was a normal foreach using Directory.GetFiles()
5-2266
of course the results weren't conclusive , as far as I know to carry on a proper benchmarking you need to use a ram drive instead of a HDD .
Note:that the performance difference between EnumerateFiles and GetFiles becomes more apparent as the number of files increases.
这是普通的旧式 C#
这是 LINQ
Here's plain old C#
And here's LINQ