使用 NTFS 压缩的文件是解压缩到磁盘上还是内存中?

使用 NTFS 压缩的文件是解压缩到磁盘上还是内存中?

NTFS 解压缩在 Windows 中如何工作?根据 Microsoft 的说法,NTFS 解压缩是通过扩展文件然后使用它来完成的。这听起来没错,但我的问题是这个过程在技术上是如何发生的。

Windows 是先将压缩文件加载到内存中,在内存中展开,再从内存中读取吗? 还是先将压缩文件加载到内存中,再将其展开到磁盘或在内存中展开,再写入磁盘,然后再读取?

我想知道是否可以通过使用 NTFS 压缩来提高计算机的性能。这样,无法处理那么多写入操作的慢速磁盘驱动器或 SSD 将始终有较少的数据需要写入和读取,而我大部分时间处于空闲状态的强大处理器可以解压缩文件,从而提高存储速度和健康状况。

答案1

Windows 将文件解压到内存中。将其解压到磁盘上会完全抵消任何速度改进,并会导致大量不必要的磁盘写入。请参阅这篇有关 NTFS 稀疏文件和压缩的 Microsoft 博客文章

  1. NTFS 确定正在访问哪个压缩单元。
  2. 读取压缩单元的整个分配范围。
  3. 如果单元未压缩,则跳至步骤 5。否则,NTFS 将尝试保留(但不分配)将解压缩的 CU 写回磁盘所需的空间。如果磁盘上没有足够的可用空间,则应用程序可能会在读取期间收到 ERROR_DISK_FULL。
  4. CU 将被解压在记忆中
  5. 解压缩的字节范围将被映射到缓存中并返回给请求的应用程序。
  6. ...

当然,如果内存不足,解压过程占用的内存可能会导致其他内存被调出并写入页面文件中的磁盘。幸运的是,只有包含程序实际读取的部分的块才会被解压;如果您只需要几个字节,NTFS 不必解压整个文件。

如果您的 SSD 速度很快,那么 NTFS 压缩可能不会带来速度提升。可以想象,您的处理器解压数据所花的时间加上磁盘读取压缩数据所花的时间加起来可能比您的 SSD 读取未压缩数据所花的时间还要多。这还取决于您处理的文件的大小。可压缩文件的最小大小范围为 8 KB 到 64 KB,具体取决于您的簇大小。任何小于该大小的文件都根本不会被压缩,但会增加少量的簿记工作。

如果您对压缩文件进行大量写入,您会发现由于所使用的压缩算法(LZ)导致速度差异很大。

进一步阅读:NTFS 压缩如何影响性能?

相关内容