Geo*_*Boy 8 .net c# linq vb.net delete-file
我看过诸如清空目录的最佳方法之类的问题?
但我需要知道,
除了.zip找到的任何文件之外,删除目录中找到的所有文件的最快方法是什么.
在这里闻到像linq ......还是什么?
通过说最快的方式,我的意思是最快的执行时间.
小智 10
如果您正在使用.NET 4,那么您可以利用.NET现在将您的功能平行化的智能方式.这段代码是禁食的方式.这也与处理器上的核心数量相称.
DirectoryInfo di = new DirectoryInfo(yourDir);
var files = di.GetFiles();
files.AsParallel().Where(f => f.Extension != ".zip").ForAll((f) => f.Delete());
Run Code Online (Sandbox Code Playgroud)
小智 8
最快的是你要求最少的代码行或最快的执行时间?下面是一个使用LINQ并且每个循环并行的示例,以便快速删除它们.
string[] files = System.IO.Directory.GetFiles("c:\\temp", "*.*", IO.SearchOption.TopDirectoryOnly);
List<string> del = (
from string s in files
where ! (s.EndsWith(".zip"))
select s).ToList();
Parallel.ForEach(del, (string s) => { IO.File.Delete(s); });
Run Code Online (Sandbox Code Playgroud)
小智 5
在撰写此答案时,以前的答案都没有使用Directory.EnumerateFiles(),它允许您在构造列表时对文件列表进行操作.码:
Parallel.ForEach(Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories).AsParallel(), Item =>
{
if(!string.Equals(Path.GetExtension(Item), ".zip",StringComparison.OrdinalIgnoreCase))
File.Delete(Item);
});
Run Code Online (Sandbox Code Playgroud)
据我所知,在这种情况下,使用AsParallel()的性能提升不应该很大(如果找到的话),但它确实在我的情况下有所不同.
我比较了删除4689个文件列表中所有的.zip文件所需的时间,其中10个是使用1-foreach的zip文件.2平行的foreach.3- IEnumerable的().进行AsParallel().的ForAll.4-parallel foreach使用IEnumerable().AsParallel()如上图所示.结果:
1-1545
2-1015
3-1103
4-839
第五个也是最后一个案例是使用Directory.GetFiles()的普通foreach
5-2266
当然结果并不是决定性的,据我所知,要进行适当的基准测试,你需要使用ram驱动器而不是硬盘驱动器.
注意:随着文件数量的增加,EnumerateFiles和GetFiles之间的性能差异变得更加明显.
这是普通的旧式 C#
foreach(string file in Directory.GetFiles(Server.MapPath("~/yourdirectory")))
{
if(Path.GetExtension(file) != ".zip")
{
File.Delete(file);
}
}
Run Code Online (Sandbox Code Playgroud)
这是 LINQ
var files = from f in Directory.GetFiles("")
where Path.GetExtension(f) != ".zip"
select f;
foreach(string file in files)
File.Delete(file);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12006 次 |
| 最近记录: |