我正在编写一个小型的I/O库,以协助完成一个更大(业余)项目。该库的一部分通过FileStream
对象读取/写入文件,并执行各种操作。在每个StreamReader.Read(...)
调用时,我会触发一个事件,用于在主应用程序中显示进度信息。循环中进行的处理是多样化的,但时间消耗不太大(例如可以只是简单的文件复制,或者可能涉及加密...)。
我的主要问题是:使用哪种最佳内存缓冲区大小?考虑到物理磁盘布局,我可以选择2k,这将覆盖CD扇区大小,并且是512字节硬盘扇区的好倍数。在更高的抽象层次上,您可以选择更大的缓冲区,它可以一次读取整个FAT簇。我意识到在今天的PC上,我可以选择更耗费内存的选项(例如几MiB),但这会增加UI更新之间的时间,并导致用户感知到一个反应较慢的应用程序。
另外,我最终希望为托管在FTP / HTTP服务器上的文件提供类似的接口(通过本地网络/较快的DSL)。对于那些文件,什么是最佳的内存缓冲区大小(再次是“最佳情况”下感知响应速度和性能之间的权衡)?