哪种删除文件的方法效果最佳?
请注意根目录必须仍然存在,所以我可以这样做:
var photo_files = Directory.EnumerateFiles(item_path, "*.jpg", SearchOption.TopDirectoryOnly);
foreach (var photo in photo_files)
{
File.Delete(photo);
}
或删除整个目录,然后重新创建。
10000或甚至100000个文件会有多少性能差异?
P.S。为了澄清一点,.NET没有一次删除文件夹中所有文件并离开目录的功能。
答案 0 :(得分:5)
删除目录时,它只能写入驱动器的主文件表,而如果删除每个文件,则每个文件都有写操作。因此,删除目录并重新创建它会更有效。
在与@Mr Disappointment交换之后,我会对我的回答提出以下修正:
如果你需要“经常”这样做,那么你可以自己构建一个如下所示的扩展方法:
public static class IOExtension
{
public static void PurgeDirectory(this DirectoryInfo d)
{
string path = d.FullName;
Directory.Delete(d.FullName,true);//Delete with recursion
Directory.CreateDirectory(path);
}
}
这样你就可以在DirectoryInfo类上调用它,如...
Directory Info di = new DirectoryInfo(path);
di.PurgeDirectory();
答案 1 :(得分:3)
关于性能观点,您可以删除整个目录并重新创建。在重新创建时,您只需要创建目录。
答案 2 :(得分:3)
我想说直接删除目录可以提供最佳性能,但这是基于每个File.Delete
调用请求的单一权限要求的推测,而不是使用{{1}时的初始检查 - 确切地说,细节中还会有更多的恶魔。
两者都循环遍历文件,最终,归结为调用本机Windows函数来完成工作 - 每个文件一次。
请记住,使用IO时最大的瓶颈实际上是读取或写入磁盘的硬件。
您是否对此进行了测试,以确定在您的情况下哪种结果是现实的?
答案 3 :(得分:0)
答案 4 :(得分:-1)
这个问题就像:“太阳的中心有多热?”
你肯定知道的唯一方法是去那里。所以,创建一个测试工具并去那里。
创建一个文件夹并将相同的图像放在文件夹中10000次。使用guid或其他唯一名称命名文件。你可以为此编写一个简单的程序。
然后运行删除代码并为两种情况计时。根据需要重复以确认结果。
你可以用一个.net秒表课来计时。您也可以使用environment.tickcount来获取时间。