我正在阅读二进制文件,这是一个示例:
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16*1024];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
......
}
}
显然缓冲区大小(16*1024)对性能有很大的影响。我读过它取决于 I/O 技术(SATA、SSD、SCSI等)以及文件所在分区的片段大小(我们可以在格式化分区时定义)。
但这里有一个问题: 是否有任何公式或最佳实践来定义缓冲区大小?现在,我正在根据反复试验进行定义。
编辑: 我已经在我的服务器上测试了不同缓冲区大小的应用程序,我得到了 4095*256*16 (16 MB) 的最佳性能!!!4096 慢了 4 秒。
以下是一些非常有用的旧帖子,但我仍然无法理解原因: