【发布时间】:2011-06-03 01:02:06
【问题描述】:
我即将做出可能对性能产生明显影响的设计决策。一般来说,库是如何处理解压的;从内存或硬盘解压文件更便宜?
我想这会因库而异,但是 zlib ——只是一个更流行的库的一个例子——呢,当它从硬盘中提取数据时,它是否首先将数据复制到内存中(这意味着两者之间没有性能差异两种方法),还是可以直接从硬盘中提取?
【问题讨论】:
我即将做出可能对性能产生明显影响的设计决策。一般来说,库是如何处理解压的;从内存或硬盘解压文件更便宜?
我想这会因库而异,但是 zlib ——只是一个更流行的库的一个例子——呢,当它从硬盘中提取数据时,它是否首先将数据复制到内存中(这意味着两者之间没有性能差异两种方法),还是可以直接从硬盘中提取?
【问题讨论】:
默认情况下,zlib 会根据预定义的缓冲区大小“逐块”读取文件;这允许它压缩/解压缩大于可用系统内存的数据。
由于从磁盘读取的成本很高(与从内存读取相比),首先将文件加载到内存中可以提高性能,因为文件大于默认缓冲区大小且小于可用内存。文件与缓冲区大小的倍数越大,文件在磁盘上的碎片越少,性能就会提高。
【讨论】: