Ami*_*ian 10 .net c# windows filesystems performance
我正在阅读二进制文件,这是一个示例:
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16*1024];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
......
}
}
Run Code Online (Sandbox Code Playgroud)
显然缓冲区大小(16*1024)在性能方面有很大的作用.我读过它取决于I/O技术(SATA,SSD,SCSI)等)以及它上面存在文件的分区的片段大小(我们可以在格式化分区期间定义).
但问题是: 是否有任何公式或最佳实践来定义缓冲区大小?现在,我正在根据反复试验来定义.
编辑: 我已经在我的服务器上测试了不同缓冲区大小的应用程序,并且我获得了4095*256*16(16 MB)的最佳性能!4096慢了4秒.
以下是一些非常有用的旧帖子,但我仍然无法得到原因:
小智 7
" 顺序文件编程模式和.NET性能 "是I/O性能改进的一篇伟大文章.
在该 PDF文件的第8页中,它显示缓冲区大小大于8个字节的带宽是不变的.考虑到该文章是在2004年编写的,硬盘驱动器是" Maxtor 250 GB 7200 RPM SATA磁盘 ",结果应该是最新的I/O技术不同.
如果您正在寻找最佳性能,请查看pinvoke.net或PDF文件的第9页,未缓冲的文件性能测量结果显示更好的结果:
在未缓冲的I/O中,磁盘数据直接在应用程序的地址空间和设备之间移动,无需任何中间复制.
归档时间: |
|
查看次数: |
9114 次 |
最近记录: |