如何优化 Windows 的复制和粘贴过程?

如何优化 Windows 的复制和粘贴过程?

当用户或程序在同一物理磁盘上复制一个大文件时,Windows 执行以下算法:

1. Read a piece of data from disk.
2. Write a piece of data to disk.
3. Do points 1. and 2. until whole file is not written fully.

如果磁盘是 HDD,这个过程需要一些时间,因为 HDD 的磁头需要从读取点移动到写入点。因此,如果我手动将文件复制到单独的磁盘,速度会更快,因为磁盘将以流速度读取和写入数据。

这一切都很明显。那么是否可以配置一个文件 windows 系统,先将大文件复制到“缓存”磁盘,然后当文件系统在同一物理磁盘上收到复制命令时将其复制回原始文件?

答案1

不,不修改系统代码是不可能的。

此外,我认为您高估了从磁盘上的源物理地址空间和目标物理访问空间进行扫描和查找所浪费的时间。

除非系统的 RAM 严重不足,否则您所说的读取的“部分”相当大,在此期间只发生了一次扫描/搜索。其余的是顺序读取。此数据被发送到 IO 控制器,然后发送到系统总线,在 RAM 中缓冲,然后进入 CPU IO 模块进行处理。这一直持续到缓冲区被清除,然后 CPU 发出指令将数据写入磁盘。此时,我们进行另一次扫描/搜索以找到目标地址空间,并开始顺序写入。

因此,一般来说,读/写顺序 IO 时间将使切换位置的随机访问时间相形见绌。读取的“片段”越大,用于重新定位磁头的总操作时间就越少。

扫描和寻道时间是显著的性能拖累因素,但仅限于大量较小文件的情况,在这种情况下,磁盘必须非常频繁地重新定位才能完成任务,而实际将数据传输到 CPU 的时间则较少。除此之外,对于每个文件,都必须读取并写入 NTFS 元数据,因此磁盘必须为每个文件重新定位到至少两个不同的位置。

此外,Windows 是一个多进程系统,因此很可能不止一方要求磁盘读取或写入不同的位置。您的进程不可能独占访问资源,从而阻止发生多个 IO 操作,并导致您在每次进程休眠、脉冲或变为活动状态时重新定位。如果您要更改 Windows 的行为方式,除该单个副本之外的其他进程也将一直使用缓存驱动器,因此您的进程将在整个操作过程中像源驱动器一样频繁地重新定位它。

最后,您的方法唯一可行的方法是,在后台预测您想要提前缓存文件。否则,您只是增加了复杂性并且没有获得任何实际好处。


编辑:至于什么会对你有帮助,考虑买个小的SSD(也许32GB)然后用它来IO 缓存。Windows 会在有时间和机会时自动填充它,并且缓存的文件越多,从磁盘读取的时间就越少(尽管缓存越多意味着需要更多的缓存管理)。

保持机械磁盘(而非 SSD)的碎片整理良好,并确保驱动器不会太满。驱动器填满后,IO 需要更长时间,文件碎片也会更多。

或者最好的是,如果您不需要大容量,那么购买 SSD 即可解决问题!

相关内容