我正在阅读二进制文件,这里是一个样例:
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秒。
以下是一些旧帖子,非常有帮助,但我仍然无法理解原因:
ReadFully
意味着读取流并返回完整内容... 但你是绝对正确的,无法预测方法实际上在做什么/是否反映了实际问题... - Alexei Levenkov