微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除文件vs目录+重新创建性能

如何解决删除文件vs目录+重新创建性能

|| 哪种删除文件性能最佳? 删除每个文件,或 一次删除包含文件的整个目录,然后重新创建目录 只是要注意根目录必须仍然存在,所以我可以这样做:
var photo_files = Directory.EnumerateFiles(item_path,\"*.jpg\",SearchOption.TopDirectoryOnly);

foreach (var photo in photo_files)
{
    File.Delete(photo);
}
删除整个目录,然后重新创建。 10000个甚至100000个文件性能差异有多少? 附言只是为了澄清,.NET没有功能一次删除文件夹中的所有文件并离开目录。     

解决方法

删除目录时,它是对驱动器主文件表的一次写入,而如果删除每个文件,则每个文件都有一个写入操作。因此,删除目录并重新创建它更有效。 在与@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();
    ,我想说直接删除目录将提供最佳性能,但这是基于每次
File.Delete
调用所请求的权限要求的单一因素,而不是使用
Directory.Delete
时进行初始检查的推测-在这种情况下,甚至会有更多的恶魔细节,可以肯定。 两者都循环遍历文件,最终都归结为调用本机Windows函数以完成工作-每个文件一次。 请记住,使用IO时最大的瓶颈实际上是正在读取或写入的磁盘的硬件。 您是否对此进行了测试,以查看您所处情况的真实结果是什么?     ,关于性能,您可以删除整个目录并重新创建。重新创建后,您仅需要创建目录。     ,某些地方必须删除所有文件。如果您不直接这样做,则必须间接地为您完成(例如,炮击并调用\“ RmDir / S \”)。因此,整个系统的性能大致相同。您的应用程序的性能可能会有所不同,具体取决于您是否必须等待所有文件首先被删除。     ,这个问题就像:“太阳的中心有多热?” 您肯定会知道的唯一方法就是去那里。因此,创建一个测试工具,然后去那里。 创建一个文件夹并将同一图像放入该文件夹中10000次。使用GUID或其他唯一名称来命名文件。您可以为此编写一个简单的程序。 然后运行删除代码并对两种情况进行计时。根据需要重复以确认结果。 有一个.net秒表类,您可以用来计时。您还可以使用environment.tickcount来获取时间。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。