【问题标题】:How to pick a file I/O buffer size for reading a file in Windows?如何选择文件 I/O 缓冲区大小以在 Windows 中读取文件?
【发布时间】:2011-06-30 15:31:15
【问题描述】:

在调查通过 WAN 读取文件时我的应用程序的一些性能下降时,我注意到在 Windows 资源管理器中复制该文件要快得多。

对 Process Monitor 的进一步调查揭示了原因:我的应用程序使用 C 运行时的默认 BUFSIZE 512,而 Windows 资源管理器以某种方式确定它应该以 61440 字节块读取文件(这显然是两者都支持的最大值SMB 或 Windows 的 SMB 实现)。因此,Windows 资源管理器必须减少很多往返行程并且运行得更快。

大多数关于缓冲区大小的建议都在 4k-16k 范围内,但对于 WAN 环境,通过最大化缓冲区大小来最小化往返行程是有意义的。 Windows 资源管理器如何确定要使用的缓冲区大小?

【问题讨论】:

  • 总是使用61440吗?或者它使用不同的数量?也许它是硬编码的..
  • 它对(非网络副本)使用相同的读取大小吗?

标签: networking file-io buffer windows-explorer wan


【解决方案1】:

我会认为小于网络 MTU 的东西可能会很好

【讨论】:

  • SMB 可能在网络级别进行了优化以保持低于 MTU,但在系统调用级别 (ReadFile),进程监视器显示资源管理器使用 61440。
  • MTU 大小的几倍会好很多:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 2011-03-03
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
相关资源
最近更新 更多