复制时使用的理想内存块大小是多少?

Zac*_*zic 7 c++ file-io memory-management

我目前使用每个内存块100兆字节来复制大文件.

人们通常使用的"好"量是多少?

编辑

感谢所有的好评.

我对这些概念还很陌生,所以我会尝试理解很多已经说过的(例如写回缓存).我不断学习新东西:)

Han*_*ant 9

4096和32KB之间的块是典型的选择.使用100MB会适得其反.您正在使用的可投入到缓冲器占用RAM 为文件系统写回缓存更好地利用.

当文件完全适合缓存时,复制文件非常快,WriteFile()调用是一个简单的内存到内存副本.然后缓存管理器懒洋洋地将其写入磁盘.但是当缓存中没有空间时,当WriteFile()必须等待空间可用时,复制速度会从悬崖上掉下来.它现在处于磁盘写入速度.


Baf*_*ois 5

我建议你对此进行基准测试,并记住要包含小的块大小.在我自己的测试中,我得到了相当违反直觉的结果.

当从硬盘驱动器读取和写入时,512字节和512 kB之间的所有(2的幂)块大小给出相同的速度.将块大小从512 kB增加到1 MB可将复制速度降低到约60%.增加块大小会进一步提高速度,但永远不会一直回到使用小块的速度.

当所有复制的数据都在高速缓冲存储器中时,(更快)复制速度随着块大小的增加而提高,在达到32 kB块时变平,然后从256 kB到512 kB时突然降低到之前速度的一半左右阻止,永远不会恢复到以前的速度.

在此测试之后,我在几个程序中删除了大约1 MB到32 kB的读/写块大小.