Windows 10 删除大量小文件的速度非常慢。有什么办法可以加快速度吗?

Kag*_*sch 95 file-management windows-10

我批量处理数以万计的 20 kB JPEG 文件,这些文件加起来可达 GB。当我尝试删除旧批次时,Windows 10 的删除率非常低,有时甚至出于某种原因降至零:

在此处输入图片说明

这只是我所使用的硬件的一个事实,还是有一些提示和技巧我可以尝试加快这个删除过程?

har*_*ymc 98

从图像看来,您正在通过资源管理器删除文件,这是最慢的方法。

你可以做些什么来改善:

  • 使用Shift+Del删除文件,因此删除的文件不会移动到回收站(无法恢复)

  • 使用类似于(用于del /?查看所有参数)的命令从命令提示符内发出删除:

    del /f /q *.*           (del in current folder, add `/s` to traverse sub-folders)
    del /f /q /s folder
    
    Run Code Online (Sandbox Code Playgroud)

  • 评论不用于扩展讨论;此对话已[移至聊天](https://chat.stackexchange.com/rooms/99055/discussion-on-answer-by-harrymc-windows-10-deletes-lots-of-tiny-files-super-减缓)。 (3认同)
  • 关于 `del` 命令,如果我没有记错的话,将输出重定向到 `NUL` 也应该加快它们的速度。 (2认同)

小智 30

我不知道为什么 Explorer 这么慢,但您可能会考虑将每批图像放在一个单独的文件系统卷上并快速格式化该卷以删除它们。Windows 10 原生支持将文件挂载为磁盘卷。重新格式化的速度与卷上的内容无关,因为它会忽略现有文件系统而只写入一个新文件系统。

数以万计的 20K 文件听起来不算太多 GB。如果所有实时批次的总大小小于您的物理 RAM,您也可以将它们放在 RAM 磁盘上(使用,例如ImDisk),仍然格式化或卸载卷以删除它们。即使是 RAM 磁盘上的普通递归删除也可能更快,具体取决于导致速度减慢的原因。如果您需要文件在重新启动后继续存在,这显然不是一种选择。

重新格式化以删除的一个缺点是您需要成为提升的管理员。另一个原因是您可能会意外格式化错误的卷,但实际上任何批量删除文件的方法都存在删除错误文件的风险。如果你给卷提供描述性标签,TempJpeg1那么格式化它们可能就像从命令行删除一个巨大的目录一样防错。

  • 与有关防病毒的其他答案相关联,也应将包含这些虚拟磁盘文件的目录从防病毒中排除,否则 OP 可能会受到正在扫描的虚拟磁盘内部数据以及外部文件容器的双重惩罚被反复扫描。 (4认同)
  • @PeterCordes WinArchiver 和 Pismo File Mount 可以将 ZIP 挂载为只读驱动器。但是 VHD 可以设置为可扩展(仅使用它需要的实际空间),将批处理添加到挂载的 VHD 应该比重复修改 zip 文件以添加它们所花费的开销更少。 (3认同)
  • Windows 可以透明地查看 ZIP 文件中的 JPEG 吗?设置工作量要少得多,并且仍然可以非常快速地从主文件系统中删除*整个*批次。这是设置管理复杂性与对所有使用它的程序透明的一组不同的权衡。固定大小与弹性容器大小。也可能更快地从批处理中为单独的文件系统添加/删除文件。(将 JPEG 压缩成 ZIP 可以在您从其他地方复制它们时即时完成,也可以在一夜之间完成,以便第二天您可以对批次进行分类。) (2认同)

Bob*_*Bob 26

至少在此操作期间禁用您拥有的任何防病毒/反恶意软件实时保护。这包括 Windows Defender。还有任何反勒索软件保护(由某些备份程序提供)。

实时保护通常与文件操作挂钩,并且在历史上因大幅减慢涉及大量文件的任何操作而臭名昭著。

如果您觉得有必要,您可以在删除完成后重新启用它们。

  • 如果其他人想知道,我在分析中观察到 AV 愚蠢地扫描正在被删除的文件。 (16认同)
  • @Bobson:当文件被保存时它会提前 3 毫秒或在文件被执行时提前 2 毫秒被扫描。 (6认同)
  • @Joshua - 我不认为它*完全*愚蠢,但它肯定很烦人。成功安装自身的恶意软件总是有可能删除它用来到达那里的文件,使其更难检测/分析。也就是说,这绝对是一个边缘情况,我怀疑是否值得额外的开销。 (3认同)
  • AV 软件在需要扫描时完全缺乏任何合理的逻辑。应该只在文件更改后第一次打开以进行读取/执行。 (2认同)

小智 10

将此作为命令运行会快很多。启动cmd并运行

RD frames /S /Q
Run Code Online (Sandbox Code Playgroud)

这将删除该文件夹及其中的所有文件和子目录,而不会用它正在删除的每个文件名向屏幕发送垃圾邮件。

RD = remove directory
/S = subdirectories included
/Q = quiet mode
Run Code Online (Sandbox Code Playgroud)


小智 8

每批次创建一个分区,假设为 10GB 左右,完成给定的批量快速格式化分区后。所有文件都在几秒钟内消失。

  • OP 将如何执行此操作?请参阅 [answer] 或 [tour] 以改进您的答案。 (2认同)

Ben*_*ork 6

处理漫游配置文件,我已经看到了很多。根据我的经验,发送任何类型的删除命令都没有使用 Robocopy 将 /MIR 空文件夹发送到目的地那么快。我没有任何原始数据或实际指标表明这比任何已经提到的选项都快,但它比使用 Explorer shell 快得多。

只需创建一个新的空目录,或引用当前的空目录,然后运行以下命令:

robocopy x:\path\to\emptyfolder x:\path\to\delete /MIR /R:1 /W:1 /MT:128 /LOG:x:\path\to\logfile.log
Run Code Online (Sandbox Code Playgroud)
/MIR :: MIRror a directory tree (equivalent to /E plus /PURGE). 
/R:1 :: number of Retries on failed copies: default 1 million.
/W:1 :: Wait time between retries: default is 30 seconds. 
/MT:128 :: Do multi-threaded copies with n threads (default 8).
               n must be at least 1 and not greater than 128.
               This option is incompatible with the /IPG and /EFSRAW options.
               Redirect output using /LOG option for better performance.
Run Code Online (Sandbox Code Playgroud)

使用 MT 时您需要记录日志,在屏幕上显示输出时肯定存在可测量的延迟。

通过使用 /MT:128 作为一个选项,它会最大化它一次可以“删除”的文件数量。

另请注意,如果这是您第一次使用 Robocopy,您应该使用 /L 标志进行试运行:

/L :: List only - don't copy, timestamp or delete any files.
Run Code Online (Sandbox Code Playgroud)

然后检查日志并确保操作符合您的要求。

参考:

  • 这是迄今为止在 Windows 中最快的方法。在删除网络驱动器上的巨大文件夹树时也能很好地工作,它可以处理那些路径对于资源管理器来说太长的非常深的文件夹树。 (2认同)