AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1485083
Accepted
Kagaratsch
Kagaratsch
Asked: 2019-09-23 06:05:43 +0800 CST2019-09-23 06:05:43 +0800 CST 2019-09-23 06:05:43 +0800 CST

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

  • 772

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

在此处输入图像描述

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

windows-10 file-management
  • 11 11 个回答
  • 65901 Views

11 个回答

  • Voted
  1. Best Answer
    harrymc
    2019-09-23T08:38:39+08:002019-09-23T08:38:39+08:00

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

    你可以做些什么来改进:

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

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

        del /f /q *.*           (del in current folder, add `/s` to traverse sub-folders)
        del /f /q /s folder
      
    • 101
  2. benrg
    2019-09-23T21:17:53+08:002019-09-23T21:17:53+08:00

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

    数以万计的 20K 文件听起来并不像千兆字节。如果所有实时批处理的总大小小于您的物理 RAM,您还可以将它们放在 RAM 磁盘上(使用例如ImDisk),仍然格式化或卸载卷以删除它们。即使是 RAM 磁盘上的普通递归删除也可能会快得多,具体取决于导致减速的原因。如果您需要文件在重新启动后仍然存在,这显然不是一个选项。

    重新格式化以删除的一个缺点是您需要成为提升的管理员。另一个是您可能会不小心格式化错误的卷,但实际上任何大规模删除文件的方法都有删除错误文件的风险。如果您给卷提供描述性标签,TempJpeg1那么格式化它们可能与从命令行删除一个巨大的目录一样防错。

    • 31
  3. Bob
    2019-09-24T00:10:30+08:002019-09-24T00:10:30+08:00

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

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

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

    • 28
  4. Chris
    2019-09-24T09:16:29+08:002019-09-24T09:16:29+08:00

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

    RD frames /S /Q
    

    这将删除文件夹及其中的所有文件和子目录,而不会在屏幕上显示它正在删除的每个文件名。

    RD = remove directory
    /S = subdirectories included
    /Q = quiet mode
    
    • 14
  5. RobK
    2019-09-24T03:19:25+08:002019-09-24T03:19:25+08:00

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

    • 8
  6. BenYork
    2019-09-24T11:26:40+08:002019-09-24T11:26:40+08:00

    处理漫游配置文件,我已经看到了很多。根据我的经验,发送任何类型的删除命令都不如使用 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
    

    /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.
    

    使用 MT 时您需要 LOG,在屏幕上显示输出时肯定会有可测量的延迟。

    通过使用 /MT:128 作为一个选项,它将一次性“删除”最多的文件数量。

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

    /L :: List only - don't copy, timestamp or delete any files.
    

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

    参考:

    • 来自 Microsoft 的 Robocopy: https ://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy
    • 来自 ss64 的 Robocopy:https ://ss64.com/nt/robocopy.html
    • 6
  7. Blerg
    2019-09-24T08:17:54+08:002019-09-24T08:17:54+08:00

    要添加到提供的答案,删除操作需要这么长时间的原因是由于您使用的硬盘驱动器类型。在您的一条评论中,您说您使用的是机械硬盘驱动器,与 SSD 相比,它们可以执行的 IOPS 量非常小。Wikipedia 列出了机械驱动器和固态驱动器可以在其站点上执行的大致 IOPS 数量。

    基本上发生的是操作系统告诉硬盘驱动器擦除分区表中文件的元数据,从而将其从视图中删除(它仍然存在,但操作系统不再知道如何访问它)。它基本上是对硬盘驱动器的非常小的写入(它正在向它写入 0),因此它是一个快速的 IOP,它可以做的比 Wiki 上列出的要多得多,因为 Wiki 列出了随机和持续的写入。

    现在要记住的是,Explorer 会在删除时尝试与系统上运行的所有其他东西配合得很好,这可能会很慢。另一方面,该del命令根本不会尝试变得好,并且会尽快删除。

    升级到 SSD 将有助于您的工作,因为它们的 IOPS 通常以数千计,而机械驱动器以数百计。您也可以尝试使用闪存驱动器看看是否有帮助;但是,您的结果将高度依赖于您使用的驱动器。如果您有 RAM,(并且不介意丢失图像的风险),您可以创建一个 RAM 驱动器并使用它。我个人使用过ImDisk Virtual Disk Driver(无从属关系),取得了很大的成功,而且它是免费的。

    • 4
  8. Woric
    2019-09-24T08:37:02+08:002019-09-24T08:37:02+08:00

    我在一些自动化测试中遇到了这个确切的问题,每次测试运行都会创建和删除数千个文件。

    这是我为获得良好性能所做的事情。

    1. 始终删除整个文件夹并避免使用回收站。如果您手动执行此操作,请使用命令行。

    2. 您可以将一些内存转换为 RAM 驱动器吗?我购买了额外的 RAM,它运行良好,因为这些文件应该在我的测试中被删除。(更好的解决方案是专用的电池支持 RAM 驱动器,但它们非常昂贵。)

    3. 随着时间的推移,写入第 1 代和第 2 代 SSD 驱动器的速度会变慢,最终无法使用。运行低级别的“Trim 命令”可以解决此问题,但并非所有操作系统/硬件组合都支持 Trim。最终我需要购买新的 SSD,因为我的 SSD 被重写了太多次。(显然,我的测试正在扼杀我廉价的 SSD 驱动器。我花了一段时间才弄清楚。)

    4. 如果您使用的是 HDD,请定期对驱动器进行碎片整理。

    祝你好运。我花了几个月的时间和几个 SSD,然后是额外的 RAM,才找到对我有用的策略,所以我感到你的痛苦..

    • 3
  9. Michał Leon
    2019-09-27T09:10:09+08:002019-09-27T09:10:09+08:00

    除了其他很棒的答案之外,我还想与您分享一些技巧:

    • 删除文件夹中的所有文件:del *.*
    • 快捷方式:同上,少打字:del..

    现在让您的生活更轻松:

    • 无需回答“您确定”问题即可删除多个文件:echo Y | del.
    • 2
  10. Broly LSSJ
    2019-09-23T07:00:38+08:002019-09-23T07:00:38+08:00

    删除许多目录条目将比删除单个净大小的目录花费更长的时间。删除多个文件时,删除单个文件时需要多个命令而不是单个命令。

    现在,当一个大文件被删除时,文件映射器被告知取消分配该大文件的内存,但文件的 1 和 0 不会重置。映射器只是被告知可以自由地在旧的 1 和 0 上写新的东西。基本上,这是一个命令,需要时间来清除碎片文件的所有内存分配。当您删除一百万个小文件时,您正在向映射器发送一百万个命令,必须一次执行每个命令。

    因此解决方案是使用软件擦除已删除文件的驱动器以及留下的 1 和 0。只需一个命令即可擦除空间。仅当您认为以后不需要恢复文件时才使用该软件。

    • 1

相关问题

  • VMware Workstation USB 仲裁服务无法自动启动

  • 如何在域和 Linux 活动目录中启用指纹传感器

  • 资源管理器侧面板中的桌面外壳快捷方式

  • 为什么我不能将文件从 Android 发送到 Windows 10?

  • 在多个文件上打开方式?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    Windows 10 服务称为 AarSvc_70f961。它是什么,我该如何禁用它?

    • 2 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Marko Smith

    ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056)

    • 4 个回答
  • Marko Smith

    我如何知道 Windows 安装在哪个驱动器上?

    • 6 个回答
  • Martin Hope
    Albin 支持结束后如何激活 WindowsXP? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch Windows 10 删除大量小文件的速度非常慢。有什么办法可以加快速度吗? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Ctrl+C 和 Ctrl+V 是如何工作的? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve