Каков размер буфера по умолчанию для StreamWriter

Для конструктора public StreamWriter(Stream stream) MSDN говорит

Инициализирует новый экземпляр класса StreamWriter для указанного потоком с использованием кодировки UTF-8 и размера буфера по умолчанию.

Я хочу использовать одну из других перегрузок конструктора, но хотел бы использовать размер буфера по умолчанию. Каков размер буфера по умолчанию? MSDN ничего не говорит. Rubens Farias ответ здесь говорит, что это "4 KiB" (что бы это ни значило... КБ, я думаю?), но нет ссылки, чтобы обосновать это.

Ответы

Ответ 1

Ah, когда документация не удалась, декомпилируйте. Я всегда забываю об этом!

Ну, не делай этого. Больше не нужно, вы можете посмотреть на исходный код, написанный программистами Microsoft. Всегда лучше, чем декомпилированный код, он имеет комментарии.

Посетите веб-сайт Reference Source. Он был обновлен примерно год назад, теперь он имеет очень гладкий интерфейс браузера, который на самом деле быстрее, чем декомпилятор. Просто введите StreamWriter в поле поиска. Вам понадобится не более дюжины секунд, чтобы обнаружить:

    // For UTF-8, the values of 1K for the default buffer size and 4K for the
    // file stream buffer size are reasonable & give very reasonable
    // performance for in terms of construction time for the StreamWriter and
    // write perf.  Note that for UTF-8, we end up allocating a 4K byte buffer,
    // which means we take advantage of adaptive buffering code.
    // The performance using UnicodeEncoding is acceptable.  
    internal const int DefaultBufferSize = 1024;   // char[]
    private const int DefaultFileStreamBufferSize = 4096;

Таким образом, по умолчанию для StreamWriter используется 1024 символа. И если вы пишете файл вместо потока, то есть FileStream с 4096-байтным буфером, это не может изменить. Это вызывает классическую проблему с комментариями, у них есть умение не поддерживать и несовпадать с кодом. Наделение на "адаптивную буферизацию" фактически не реализовано. KiB - это животное с 1024 пальцами ног, а не 1000.