Когда использовать .NET BufferedStream класс? - PullRequest
47 голосов
/ 29 января 2009

Сайт MSDN сообщает:

Буфер - это блок байтов в памяти используется для кэширования данных, тем самым сокращая количество звонков на операционную система. Буферы улучшают чтение и запись спектакль. Буфер может быть использован для читать или писать, но никогда оба одновременно. Читать и Написать методы BufferedStream автоматически поддерживать буфер.

Должен ли я использовать этот класс в каждом возможном случае?

Ответы [ 5 ]

68 голосов
/ 15 января 2010

По словам Брэда Абрамса, почти никогда: ссылка

Нет, нет никакой выгоды от оборачивания BufferedStream вокруг FileStream. Мы скопировали буферную логику BufferedStream в FileStream около 4 лет назад, чтобы поощрять лучше по умолчанию производительность ... На самом деле, я не думаю, что есть какие-либо потоки в .NET Framework, которые этого требуют, но могут потребоваться Реализации потоков, если они не выполняют буферизацию по умолчанию.

17 голосов
/ 29 января 2009

Ниже приведен текст из курса, который я посещаю:

Класс BufferedStream является конкретным класс, расширяющий класс Stream и используется для обеспечения дополнительного буфер памяти для другого типа поток, как синхронно, так и асинхронно. BufferedStream класс должен быть настроен либо читать или писать, когда экземпляр класс создан, но BufferedStream не может быть настроен на выполнять обе задачи одновременно время.

Microsoft улучшила производительность все потоки в .NET Framework включая встроенный буфер. производительность заметно улучшилась применение BufferedStream к существующим потоки, такие как FileStream или MemoryStream. Применяя BufferedStream для существующего .NET Каркасный поток приводит к двойному буфер.

Наиболее распространенное применение Класс BufferedStream в пользовательском потоковые классы, которые не включают встроенный буфер.

16 голосов
/ 05 сентября 2011

Лучший из известных мне случаев - это когда BinaryFormatter сериализуется / десериализуется напрямую из NetworkStream. Использование BufferedStream между ними увеличивает производительность в десять раз.

4 голосов
/ 29 января 2009

То, что должно быть использовано во всех возможных случаях, является здравым смыслом. Нет смысла использовать этот класс при чтении-записи в MemoryStream, но он может быть весьма полезен при выполнении сетевого или дискового ввода-вывода (если потоки для этих подсистем не выполняют буферизацию самостоятельно).

3 голосов
/ 29 января 2009

Обычные файловые потоки ввода / вывода уже буферизуются с помощью StreamReader / StreamWriter.

Поскольку операции чтения / записи в потоках, как правило, используют методы чтения / записи, которые принимают байтовый массив, вы естественным образом обеспечите некоторую буферизацию самостоятельно.

Если вы используете очень маленькие массивы или используете WriteByte, вы можете получить более высокую производительность, если между ними используется BufferedStream.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...