关于不同方法删除包含大量小文件文件夹的时间测试报告

在文章开始之前,感谢夏墨@刚把爹!夏小墨 在测试过程中对我的理解和帮助,以及baka@baka⑨ 和夏墨的科普。

测试灵感来源:
这项测试因小狐狸@Joey 的问题而起。在闲聊群里他提了一个问题:在Windows系统下,一个文件数量超过一万的普通文件夹,以何种方式删除所需要的时间最短?且在问题后提出“回收站删除需要3分钟(左右)”的提示。以回答该问题为目的,设计本次测试。

测试目的:

通过本次测试,尝试找出比回收站删除包含大量小文件文件夹更短的方法。

测试样本:



共包含3146个文件,大小为106MB,占用空间112MB的文件夹一个,及复制生成的样本副本3个。

注:样本文件夹采用包含有大量小文件的文件夹,而不是数据容量较大(大于5G)的文件夹,是因为①电脑配置较低,创建大量数据的文件夹副本需要占用的时间过多;②数据容量超出回收站设定容量会直接删除而不进入回收站,违背测试的目的和初衷;由于以上两个原因,以包含有大量数据的文件夹作为测试样本的方案暂不做考虑,本次测试仅以包含有大量小文件的文件夹作为测试样本。

测试内容:

通过回收站删除、两种可执行文件bat、360文件粉碎机等四种不同的删除方式,对文件夹内包含的文件数量、文件夹大小、占用空间完全一致的四个文件夹进行删除,手动记录所需时间。

注:该测试的四种方法中,方法①由Joey提供,方法②、方法③来自百度经验,方法④由夏墨提出。

测试过程:

①将文件夹拖入放入回收站;
②将文件夹更名为foldername→运行代码为【del /f/s/q foldername > nul
rmdir /s/q foldername】的bat执行文件→文件被删除;
③创建代码为【DEL /F /A /Q \\?\%1
RD /S /Q \\?\%1】的bat执行文件→将文件夹拖入文件运行→等待文件删除。
④打开360粉碎机删除→将文件夹添加到360文件粉碎机→确定后等待文件夹删除。

测试结果:
  1. 回收站删除。用时24秒25,(包括1秒我最后没反应过来的时间)统计文件数量的时间占了大部分,用时22秒左右。
  2. 用时13秒。
  3. 用时14秒77。
  4. 用时>3分钟,已不具备可比性,故将时间定为>3分钟,没有统计完整时间。


测试数据总结:

从本次测试获得的数据来看,通过执行bat文件删除包含大量小文件的文件夹可以获得最快的速度,通过回收站进行删除的速度次之,360文件粉碎机需要的时间最长。

在测试中发现,将文件夹拖入回收站后,会出现统计文件数量、大小的进度条,统计完成后,文件夹移入回收站的时间小于1秒(以1秒计),仅占总花费时间的4.1%,统计文件夹的文件数量、大小占据极大部分的时间。结合测试样本的决定,故提出如下可能性:回收站在删除文件前需对文件(夹)的大小进行判定,如果数据容量超过回收站容量上限将直接删除,小于回收站容量上限才会被允许放入回收站。

经baka科普,方法②与方法③在原理上不存在根本性的差别,仅在使用条件上存在差别。且二者的测试时间仅相差1.77秒,在手动记录的误差范围内,可基本证实这个说法。(方法②13秒,方法③14秒77)

通过测试我们发现,360文件粉碎机所需要的时间长于另外三种方法,故可以认定360文件粉碎机的根本目的不在快速删除文件,而在于文件粉碎。

可作出结论:可执行文件bat删除包含有大量小文件的文件夹所用的时间最短,考虑到用户体验,更建议使用方法③的bat可执行文件。

谢谢阅读。

5 个评论

关门放代码
哈哈,谢谢如此用心的回应我的小问题!祝愿你在此过程中有所收获!
就在测试过程里,Ctrl+F一下
思考方式获得收获无法言说,非常感谢。
这个是因为:
1. 回收站所进行的查询和统计产生了数倍于单纯标记“该文件已删除”的IO操作量
2. 文件粉碎是指彻底删除,即在HDD上将该区域填零(SSD上的彻底删除有别的实现方式,速度要快很多),填零意味着这是一次写入,文件原本有多大,就要写入多少,而且还要加上基本的IO操作量
3. 命令行最快是因为它不需要做统计

要评论文章请先登录注册