Подтвердить что ты не робот

Когда использовать класс .NET BufferedStream?

сайт MSDN:

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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