Вопрос

А Сайт MSDN состояния:

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top