Исследуя некоторую медленную производительность моего приложения при чтении файла по глобальной сети, я заметил, что копирование этого файла в проводнике Windows было значительно быстрее.
Некоторое дальнейшее исследование с Process Monitor выявило причину: мое приложение использовало значение по умолчанию BUFSIZE среды выполнения C, равное 512, в то время как Windows Explorer каким-то образом определил, что он должен читать файл в блоках по 61440 байт (что, по-видимому, является максимальным значением, поддерживаемым SMB или Windows реализация SMB). В результате Windows Explorer пришлось сделать МНОГО меньше круговых рейсов и работать намного быстрее.
Большинство рекомендаций по размеру буфера находятся где-то в диапазоне 4k-16k, но для среды WAN минимизация циклических переходов путем максимизации размера буфера имеет смысл. Как Windows Explorer определяет, какой размер буфера использовать?