【发布时间】: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