哪个是Microsoft用于复制文件的官方缓冲区大小?

时间:2015-05-24 07:36:11

标签: .net windows

我想知道在我正在开发的.Net拆分器/合并器应用程序中使用哪个正确的缓冲区大小值,因为要改进一些 FileStream 我将设置相同的缓冲区大小正如 Microsoft 内部用于 Windows 中的复制操作。

我知道这些信息是存在的并且是公开的,因为我过去在某个地方通过互联网看到了这些信息(可能在 MSDN )但是我丢失了任何参考资料,如果我记得好 Microsoft < / strong>使用8或16 kb作为缓冲区大小,在任何情况下肯定都小于1 MB。

我正在寻找官方参考,其中 Microsoft 指出他们使用的价值,或者某种技术上可证明的答案(可能使用反思?),请避免答案如“我认为他们使用X kb ... ”因为无法证明。

1 个答案:

答案 0 :(得分:4)

通过检查reference source中的实现,可以轻松检查特定流实现使用的默认缓冲区大小。

默认缓冲区大小,例如FileStream是4096字节。 Stream.Copy实现的默认缓冲区大小为80 Kb。

自己选择缓冲区大小时的一个好习惯是:

  • 使其成为OS页面大小的倍数(通常为4096字节)
  • 如果您有大量文件/流,请使缓冲区大于单个操作系统页面。
  • 如果这是(潜在的)性能瓶颈,请进行性能测试以找到合适的大小。
  • 系统A上的最佳配置可能不在具有不同硬件/软件配置的系统B上。