我试图将一些文件移动到一个文件夹中(从 E: 到 E:,所以我很确定这是在移动而不是复制),但移动 60k 个文件却要花几分钟的时间。我以为文件移动应该非常快,所以我很好奇计算机要做什么才能将一些文件移动到文件夹中?
(我使用的是 Windows Vista Home Premium Sp2,但实际上我希望以更广泛的方式来解决这个问题)
答案1
即使您只是将文件移动到同一磁盘上的文件夹,文件系统仍需要做一些工作来移动文件。必须更新主文件表 (MFT) 以反映文件的新位置,并且还必须更新文件系统日志以允许在移动因断电等原因中断时回滚更改。
我不确定如何准确计算文件系统需要执行多少不同操作,但我们可以假设它必须对 MFT 进行至少 60k 次更改。这么多更改需要进行大量小的读取和写入,而硬盘的速度不是很快。
答案2
警告:以下答案较晚
计算机会(递归地)建立所有需要移动的文件和文件夹的列表(除非缓存,但由于嵌套目录相当普遍,因此所有文件都很少出现缓存的情况)。
对于每个文件,计算机:
- R:检查其他程序是否打开了该文件的句柄,
- R:计算文件的大小,
- R:检查目的地是否存在,
- R:检查目标是否有足够的空间,
- R:检查目标中是否存在同名文件,
- R:检查对目标的写入权限,
- R:从源读取文件,
- 西:将文件写入目标,
- R:从源读取文件所有权、权限和 ACL 信息,
- 西:将文件所有权、权限和 ACL 信息写入目标,
- R:读取文件表,
- 西:写入更新的文件表,
- 西:删除(用随机值或 0 覆盖)原始文件(或其一部分),
- R:再次读取文件表(用于删除),
- 西:再次写入更新的文件表(用于删除)。
这意味着每个文件有 15 次操作(10 次读取,5 次写入;实际上操作次数更多),因此对于 60k 个文件,有超过 900k 次操作,即每秒 5k 次操作。
假设源和目标都在同一介质上(几乎总是消除了真正同时操作的可能性),再次假设是硬盘驱动器(增加了很多机械运动),5k 操作(加上后台文件操作)相当不错。
以上内容适用于所有文件中最小的文件。
考虑到文件的大小,大多数操作系统:
- 分块执行文件操作(更多读取和写入),
- 尽量不要以 100% 的负载使用硬盘,以免烧坏硬盘。
如果你在之后说你的电脑很慢那,尝试逐个移动物理文件和文档(其中 60k)。
抱歉,最后一句有些讽刺,我只是想要表达我的观点。