Naprawdę, nie ma to większego znaczenia.
Oczywiście, jeśli używasz naprawdę małych buforów, być może będziesz musiał wykonać kilka dodatkowych wywołań przez warstwy, aby uzyskać bajty (chociaż strumień prawdopodobnie przynajmniej buforuje - nie wiem, co to jest wartości domyślne to). I na pewno, jeśli użyjesz naprawdę dużych buforów, zmarnujesz trochę pamięci i wprowadzisz fragmentację. Ponieważ oczywiście robisz tutaj IO, za każdym razem, gdy zyskasz przez ulepszenie buforów, będzie to zdominowane przez czas IO.
Zgodnie z ogólną zasadą, używam potęgi dwóch od 2048 (2k) do 8192 (8k). Tylko upewnij się, że wiesz, co robisz, jeśli użyjesz bufora równego lub większego niż 85 000 bajtów (to jest wtedy "large object" and subject to different GC rules).
W rzeczywistości ważniejszy niż rozmiar bufora jest czas jego przechowywania. W przypadku obiektów spoza sterty dużych obiektów, GC jest bardzo dobry w radzeniu sobie z bardzo krótkotrwałymi obiektami (zbiory Gen 0 są szybkie) lub obiektami bardzo długowiecznymi (Gen 2). Obiekty, które żyją wystarczająco długo, aby dostać się do Gen 1 lub 2 zanim zostaną uwolnione, są względnie droższe, a zwykle o wiele bardziej warte są twoje czasy, niż martwienie się o to, jak duży jest bufor.
Ostatnia uwaga: jeśli uważasz, że masz problem z wydajnością ze względu na rozmiar używanych buforów, test to. Jest mało prawdopodobne, ale kto wie, może masz dziwną zbieżność wersji systemu operacyjnego, sprzętu sieciowego i wydania sterowników, która ma dziwny problem z buforami o pewnej wielkości.
Bardzo przydatny wpis, ale myślę, że miałeś na myśli 8192? Moc 2 -> 2048, 4096, 8192 (8k). – Derrick