Realmente, no importa mucho.
Claro, si utiliza buffers realmente pequeños, es posible que tenga que hacer algunas llamadas a través de las capas para obtener los bytes (aunque es probable que la secuencia haga al menos algo de memoria intermedia - No sé lo que es los valores por defecto son). Y claro, si usa buffers realmente grandes, desperdiciará algo de memoria e introducirá algo de fragmentación. Como evidentemente estás haciendo IO aquí, cada vez que ganes modificando los buffers estará dominado por el tiempo de IO.
Como regla general, voy con una potencia de dos entre 2048 (2k) y 8192 (8k). Solo asegúrate de saber lo que estás haciendo si vas con un búfer igual o superior a 85,000 bytes (es entonces un "large object" and subject to different GC rules).
De hecho, más importante que el tamaño del búfer es el tiempo que mantenga la misma. Para los objetos que se encuentran fuera del gran montón de objetos, el GC es muy bueno para tratar con objetos muy efímeros (las colecciones Gen 0 son rápidas) o los objetos muy longevos (Gen 2). Los objetos que viven lo suficiente como para llegar a Gen 1 o 2 antes de ser liberados son comparativamente más costosos y, por lo general, vale más la pena preocuparse por su tiempo que lo grande que es el buffer.
Una última nota: si cree que tiene un problema de rendimiento debido al tamaño de los búferes que está utilizando, pruebe. Es poco probable, pero quién sabe, tal vez tenga una extraña confluencia de la versión del sistema operativo, el hardware de red y la versión del controlador que tiene algún problema extraño con los almacenamientos intermedios de cierto tamaño.
Publicación muy útil, pero creo que se refería a 8192? Potencia de 2's -> 2048, 4096, 8192 (8k). – Derrick