用Win11删一个20GB的虚拟机镜像,点下去进度条几乎不带停顿的,两三秒就清空了。我当时还觉得微软这次总算开窍了,磁盘性能终于动刀了。结果转头清理一个项目素材目录,里面不过一万来张图片和一堆配置文件,加起来也就5GB出头,删除的一瞬间我就傻眼了,进度条走了十分钟,期间资源管理器还当了两次机,点哪儿都是白屏转圈。
这就是典型的“大文件快、小文件卡”。删大文件快是真的,但海量小文件卡顿这个事,微软根本就没修复,连治标都只能算半个。今天就把这个问题的底层逻辑讲透,顺便把我这几年调教过的各种Windows删除文件的方法和避坑经验都甩出来,看完你至少知道问题出在哪、能怎么绕过去。
1. 先搞清楚:删大文件和删小文件,根本不是同一件事
1.1 同一台电脑,两个极端
先说个结论:文件删除的快慢,起决定作用的从来不是“总大小”,而是“文件个数”。
拿我手头这台测试机举例,配置不算差,i5-12400、三星980 Pro 1TB、16GB内存,系统是Win11 23H2,补丁打到了最新。但我故意跑了两个对比:
| 删除场景 | 文件数量 | 总大小 | 实测删除耗时 |
|---|---|---|---|
| 单个ISO镜像文件 | 1个 | 9.8GB | 约2.8秒 |
| 图片素材目录 | 约11000个文件 | 5.2GB | 约8分半钟 |
总大小差了一半,删除耗时的差距却有接近两百倍。这绝对不是个例,你在任何一台装了Win11的电脑上做同样测试,结果都大差不差。有些人可能觉得是缓存或者固态硬盘的问题,但本质上是文件系统在执行两种完全不同性质的操作。
1.2 文件系统到底在背后干了什么
Windows默认用的是NTFS文件系统,它的核心数据结构里有三个东西和文件删除密切相关:
第一个是MFT,主文件表。NTFS会给每个文件分配至少一条MFT记录,这条记录里保存着文件名、大小、时间戳、权限、数据所在的簇位置等关键元数据。大文件因为数据块多,可能占多条MFT记录;小文件虽然数据少,但同样占一条记录。
第二个是父目录的索引。NTFS的目录不是文件夹里面直接装文件,而是维护一棵B+树索引,树里的每条索引项都指向对应文件或子目录。删除文件,意味着要在这棵索引树里定位、删除对应节点,并触发树的重平衡操作。
第三个是USN日志。这个默认开启的变更日志,每一次文件变更都会追加一条记录,删除文件当然也不例外。
删一个大文件时,需要处理的MFT条目可能就两三条,数据区释放靠的是bitmap位图更新,跟文件本身有多大关系不大,不到一秒钟就改完了。
删一万个小文件时,等于要重复一万次“读取MFT记录——更新MFT属性——从父目录B+树中删除索引项——写USN日志——更新位图”的完整流程。而且这些操作不是并行执行的,NTFS元数据更新在很大程度上是串行的,每个环节都是磁盘随机I/O。上万个文件就是上万次随机小I/O。
这就是小文件删除慢的根本原因,文件数量越多,元数据风暴越大,和固态硬盘还是机械硬盘有关系,但有关系不等于能解决,即便是NVMe固态,也扛不住这种allocation-heavy的操作模式。
2. 微软到底改了哪里,为什么没修到点子上
2.1 Win11“大文件变快”的优化来源
微软这几年确实在文件复制和删除上做了优化,特别是在Win11 22H2和23H2中,文件资源管理器改用了异步加载模式,复制/删除的进度计算也改了,删大文件时你能明显感觉到UI不再干等磁盘I/O了。
另外微软还优化了复制引擎的内存缓存逻辑,对于大块连续数据的读写,缓冲区调大了,吞吐量自然上去了。你可以简单理解为,这是一次在应用层和API层做的小修小补,解决的是“表面功夫”的问题。
2.2 小文件卡顿的瓶颈一个都没动
真正卡住小文件删除的,是下面这几个层面的问题,它们大多集中在系统内核和文件系统驱动层,微软这套优化根本没碰:
第一,NTFS元数据操作天然串行。MFT记录的分配与释放,目录B+树的增删,都需要持锁更新,不能大规模并发。一万个小文件,就得排着队入场。
第二,Windows Defender实时防护。这个最容易被忽略。删除文件时,Defender的minifilter驱动会拦截文件操作,把准备删除的文件扫描一遍。虽然扫描的是文件句柄,但实际上每个文件的操作都被过滤驱动过了一遍,海量小文件场景下,这个开销非常可观。你可以自己在任务管理器里观察,删除大量小文件时,MsMpEng.exe(Defender进程)的CPU占用经常能冲到20%以上。
第三,文件资源管理器的UI线程问题。这个不用多解释,删文件时进度条卡死、窗口无响应,就是UI在等待删除操作完成,而删除操作又卡在元数据风暴里,两边一叠加,系统看起来就跟死机一样。
第四,磁盘随机性能瓶颈。即便NVMe固态理论上随机读取能达到每秒几十万IOPS,但在小文件场景下,4K随机写入尤其是元数据写入的延迟依然比大块顺序写入高一个数量级。再加上NTFS每处理一个文件就要更新多个位置,IOPS再高也会被消耗殆尽。
2.3 “优化过”和“修复了”是两码事
我特意把Win11的发布说明翻了一遍,微软确实有提过“改进文件资源管理器性能”“优化文件复制速度”之类的描述,但在NTFS这个底层架构没有改的情况下,这种优化只对单文件、大文件、连续I/O场景有意义,对海量小文件的元数据瓶颈几乎无计可施。
所以说实话,“根本没修复”这句话的准确读法是:微软对这个场景做了有限的优化,但没解决根本问题。你不能说微软完全没干活,但它干活的优先级显然没放在普通用户最痛的零散文件管理上。
3. 实测记录:一万个零碎文件到底有多折磨人
3.1 测试环境和方法
先交代一下环境,方便你自己复现对比:
- 处理器:Intel Core i5-12400
- 内存:16GB DDR4 3200(非双通道)
- 系统盘:三星980 Pro 1TB NVMe
- 副盘:西数蓝盘1TB机械硬盘
- 系统:Windows 11 23H2,补丁更新到2025年1月
- 测试目标目录:D盘某项目素材目录
操作步骤:
- 用TreeSize Free统计目录文件数量和总大小。
- 清空回收站,保证删除是永久删除。
- 打开任务管理器,记录CPU和磁盘占用趋势。
- 右键删除目标目录,开始计时。
- 观察资源管理器是否“无响应”,底部记录到删除完成时间。
3.2 测试结果
NVMe上的素材目录删除结果,前面表格已经写了:约11000个文件,总大小5.2GB,删除耗时8分半钟。机械硬盘上情况更惨,我拿另一个4GB、8000多个小文件的目录做测试,直接卡了半个多小时,中间我实在等不下去,直接用任务管理器把资源管理器重启了。
任务管理器里的现象非常有代表性:资源管理器进程的CPU不算高,但磁盘活动几乎拉满,Defender进程CPU持续在10%-15%之间跳动。整个删除过程中,你看不到具体哪个文件在被处理,只有卡了半天的进度条和偶尔冒出来的“正在计算剩余时间”。
3.3 用Process Monitor看细节
如果你想把原因看得更明白,推荐用Sysinternals的Process Monitor(ProcMon)抓一下删除过程。打开过滤条件,只看explorer.exe的进程,你会看到成百上千条对NTFS元数据的操作记录,包括:
- CreateFile、SetDispositionInformationEx
- 对\System Volume Information\目录的访问
- 对USN日志相关的写入
- 大量对父目录B+树的查询操作
看到这些记录你就明白,删除一个文件不是简单“把文件标记删除”就完事,它后面拖着一长串系统级操作。小文件越来越多,这一长串操作就会被重复成千上万次。
3.4 一个容易被忽略的变量:卷影副本
如果你打开过系统保护,Windows会定期给分区创建卷影副本(VSS快照)。删除文件时,VSS也要记录变更过的数据块,尤其是小文件分布在磁盘各个位置时,卷影副本的写入放大效应会很严重。我在另一个测试中,把系统保护关闭后重新删同样数量的文件,耗时大约能缩短10%-15%。
所以,如果你确认自己不需要“先前版本”功能,把系统保护关掉或者限制占用空间,确实能换来一些删除/写入性能上的收益。
4. 别指望系统更新了,自己动手调优才是出路
既然微软短期内指望不上,那就自己动手。下面这些方法我都在实际环境里验证过,按推荐程度排了序。
4.1 压箱底技巧:用robocopy秒删海量小文件
这个方法必须放第一个说,因为它是我用过所有方案里最适合普通用户的、效率提升最明显的。
道理很简单:robocopy是命令行环境下的文件复制工具,它在处理大量文件时,走的是批处理和内核路径优化,不像资源管理器那样还要维护一个UI进度条、不断刷新剩余时间。
具体操作如下:
- 建一个空目录,比如
D:\empty_dir。 - 打开CMD或PowerShell,执行:
robocopy D:\empty_dir D:\target_dir /MIR- 等命令跑完。此时目标目录里的内容会被清空。
- 手动删除
D:\target_dir这个壳,再删掉D:\empty_dir。
这个操作的核心是/MIR参数。它的意思是“镜像目录”,即让目标目录变得和源目录一模一样。因为源目录是空的,目标目录里多余的东西就全被删掉了。robocopy内部会把这些删除操作打包处理,效率比资源管理器右击删除高一个量级。实测同样的11000个文件,用robocopy大约只需要50多秒,比图形界面快了接近十倍。
注意:
/MIR参数是镜像,不是同步。源目录有什么,目标目录就会变成什么。如果你把源和目标的参数搞反,后果是灾难性的——空目录会把你的目标目录整个清空。执行前务必看清两个路径。
4.2 临时关闭Windows Defender实时防护
这个方法见效也快,但风险需要自己权衡。
删除海量小文件时,Defender的实时防护会逐个扫描待删除文件,造成巨大的额外开销。如果你只是临时清理一次大目录,可以在删除前临时关闭实时防护:
- 打开Windows安全中心。
- 进入“病毒和威胁防护”。
- 点击“管理设置”。
- 关闭“实时保护”。
删除完成后记得马上重新打开。
也可以用管理员PowerShell操作:
# 临时关闭 Set-MpPreference -DisableRealtimeMonitoring $true # 重新开启 Set-MpPreference -DisableRealtimeMonitoring $false不过我不建议长期关闭,这毕竟是系统最后一道防线。如果你经常要处理大量小文件,更稳妥的做法是把经常操作的工作目录排除掉,这样Defender不会监控该目录内的读写,安全风险也可控。
在Windows安全中心的“排除项”里添加你的素材盘目录就行。命令行也可以:
Add-MpPreference -ExclusionPath "D:\work"4.3 禁用或限制Windows Search索引
Windows Search服务会实时监视文件变化,索引文件名和内容属性。当你有海量小文件时,这个索引器的负担不小,也容易和删除操作抢磁盘I/O。
处理方法:
- Win+R打开运行窗口,输入
services.msc回车。 - 找到“Windows Search”服务。
- 右键选择“停止”,再把启动类型改为“禁用”。
如果你不想完全禁用,可以在“此电脑”中右键一个分区,选择“属性”,把“允许此驱动器上的文件索内容”取消勾选,只针对特定大分区关闭索引。
4.4 检查卷影副本和系统保护
之前说过,卷影副本会加重小文件删除的负担。如果你是个人PC,系统盘的“系统保护”其实可以关闭,或者只保留最低的占用限制。
操作路径:此电脑右键属性 -> 系统保护 -> 选择分区 -> 配置 -> 禁用系统保护,或把“最大使用量”调低到1%-2%。
要注意,关闭系统保护意味着你不能用“以前的版本”功能恢复被改坏的文件。如果你长期做文档编辑,建议保留系统盘的卷影,但把数据盘的关闭。
4.5 数据盘可以考虑换文件系统
这个属于进阶玩法,先说风险。
如果你有一个纯数据盘(不是系统盘),且上面主要存放的是大量的、不需要权限管理的小文件,可以考虑把它格式化为exFAT。exFAT没有NTFS那种复杂的日志和元数据机制,文件记录更简单,大批量小文件删除和复制的开销明显更低,尤其适合移动硬盘和素材盘。
但exFAT的缺点也很硬:没有日志,断电后数据损坏概率更高;不支持文件权限和加密;不能用磁盘配额。所以作为移动存储可以,作为长期连接的工作盘要慎重。
另一个选择是ReFS(弹性文件系统)。ReFS在批量文件操作上的设计更现代化,处理海量小文件的场景确实有优势,甚至能设置“文件级快照”。但ReFS目前普通版不好直接用,常用的是在Windows 11专业工作站版、企业版或服务器版里开启。系统盘也不建议,兼容性还有坑,办公软件、杀毒软件、虚拟化工具不一定都支持。普通用户没必要为了删文件去冒这个险。
4.6 内存压缩和文件删除的关系
热词里有关闭内存压缩的讨论。Windows 11默认开启内存压缩,在内存紧张时会对不常用内存页面做压缩,释放物理内存,但代价是CPU开销上升。
如果内存只有8GB或更少,且你经常边开一堆软件边删大量文件,那么内存压缩确实会间接拖累整体I/O响应。如果你内存16GB以上且日常内存占用不高,关闭内存压缩对删除文件的提速效果并不明显。
关闭方法(管理员PowerShell):
Disable-MMAgent -MemoryCompression如果系统不支持这个参数,命令会直接报错。重启后生效。想恢复就执行:
Enable-MMAgent -MemoryCompression说实话,这个优化的优先级很低,只有当你在删除文件时发现内存占用长期80%以上,才值得考虑。
4.7 善用第三方工具做存储管理
- FastCopy:可以直观看到每个文件的读写速度、跳过失败文件、批量删除时还能继续列队,UI比资源管理器清楚很多。
- Everything:秒级搜索文件名,快速定位超大文件、重复文件,适合在删之前先摸清有哪些垃圾可以清。
- TreeSize Free:扫目录树,按大小排序,找出到底哪些文件夹占了大部分空间。
这些工具本身不解决“NTFS元数据风暴”的问题,但能帮你减少很多无效删除操作。毕竟最省时间的优化是“少删文件”——定期把项目归档压缩成ZIP或7z,比反复跟海量小文件搏斗划算得多。
5. 常见问题与避坑指南
5.1 删除文件时资源管理器无响应怎么办
优先级从低到高排序:
- 等。如果磁盘指示灯还在闪,说明它在干活,只是慢。你可以去泡杯茶。
- 用Ctrl+Shift+Esc打开任务管理器,看资源管理器进程的CPU和磁盘占用。如果占用一直很高,说明还在跑,耐心等;如果占用是0但窗口无响应,基本属于卡死,可以右键重启资源管理器。
- 用任务管理器结束explorer.exe进程,然后“文件”->“运行新任务”->输入explorer.exe,重新打开桌面。正在执行的删除任务可能会中断或继续,取决于系统状态。
- 最彻底的方案还是中断当前操作,改用robocopy命令行删除。
5.2 右键菜单太慢,想恢复经典菜单
Win11的新右键菜单采用XAML实现,首次打开要加载一堆扩展项,部分机器上确实有肉眼可见的延迟。想恢复Win10风格经典菜单,可以在CMD里执行:
reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve然后任务管理器重启资源管理器生效。如果想恢复新菜单,删除这个注册表项:
reg delete "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" /f再重启资源管理器。这个方法在22H2/23H2上都有效,Win11 24H2之后我没实测过,遇到问题恢复即可。
5.3 要不要关闭Windows更新
每次都有人问。我的建议是不要彻底关,尤其是不要通过改注册表或组策略把更新停掉。微软很多文件系统、存储驱动、性能修复都是靠更新推的,你长期不更新,等于把之前的老毛病全留在机器里。特别是SSD固件驱动和NVMe驱动这类东西,没有更新你可能会错过掉盘、卡顿的修复。
如果嫌更新太频繁,可以把“暂停更新”用起来,最多能暂停几周到一个月,到点了再更新一次,这样能兼顾稳定性和安全性。
5.4 重装系统能解决吗
分场景聊:
- 如果卡顿是从某个大型应用安装后出现的,比如装了某个网盘客户端、第三方杀毒软件、磁盘加密软件,它们会在系统里挂载过滤驱动,影响所有文件操作。这种时候重装,能清掉这些干扰因素。
- 如果卡顿是系统本身就有的,比如刚装好的Win11删大量小文件也慢,那重装也没什么用。问题是根上的,NTFS+Defender的组合没变,装了官方原版镜像也一样卡。
顺便提一句重装建议:用微软官方媒体创建工具做启动U盘,不要用PE和Ghost那种。装完系统后先装芯片组和NVMe驱动,再把Windows更新跑一遍,最后装应用,这样能避免很多莫名奇妙的小毛病。
5.5 微软商店问题顺带说一句
热词里多次出现微软商店打不开、闪退、报错0x80070005。如果你遇到商店异常,最简单的办法是:
- Win+R输入
wsreset.exe,清空商店缓存。 - 设置-应用-安装的应用里找到Microsoft Store,选择“高级选项”,点击“终止”和“重置”。
- 检查网络代理设置,商店对网络环境比较敏感,如果你开过代理或者自定义过DNS,很可能导致商店连不上。
0x80070005本质是权限不足,有时是系统账户权限配置出了问题,重置商店往往能解决,不行就新建一个本地管理员账户再试。
6. 一点心里话
折腾了这么多年Windows,我最大的体会是:微软在文件管理这个基础功能上,真的很会“挑活干”。它把大文件传输、复制进度条优化得丝滑顺畅,因为这是评测媒体最喜欢测的项目,数字好看,用户感知强。但海量小文件这种真实办公中高频出现的场景,制图素材、开发工程、日志文件、缓存目录,一抓一大把,体验却一直稀烂。
我现在的做法是:能不往系统盘塞小文件就不塞;数据盘定期归档,把散文件压成压缩包或打包成数据库文件;删除大量文件一律用robocopy大法。这套组合拳下来,我再也没被“正在计算剩余时间”折磨过。
最后再分享一个冷门技巧:如果你只是想把项目目录里的一部分旧文件批量删掉,可以用robocopy加/MAXAGE参数。比如只删除180天之前修改过的文件,可以先把当前日期180天之前的文件移到另一个目录,再对那个临时目录用/MIR清空。命令是:
robocopy D:\work D:\work_old /MAXAGE:180 /S /MOVE robocopy D:\empty D:\work_old /MIR搞过一次之后你就知道,Windows命令行工具箱虽然长得丑,但在处理这种脏活累活时,比鼠标点击靠谱一万倍。