59

MSDNサイトには次のように記載されています。

バッファは、データをキャッシュするために使用されるメモリ内のバイトのブロックであり、それによってオペレーティングシステムへの呼び出しの数を減らします。バッファは読み取りと書き込みのパフォーマンスを向上させます。バッファは読み取りまたは書き込みのいずれかに使用できますが、両方を同時に使用することはできません。BufferedStreamのReadメソッドとWriteメソッドは、バッファーを自動的に維持します。

このクラスはあらゆる機会に使用する必要がありますか?

4

6 に答える 6

73

Brad Abrams によると、ほとんどありません:リンク

いいえ、FileStream を BufferedStream でラップしても何のメリットもありません。約 4 年前に BufferedStream のバッファリング ロジックを FileStream にコピーして、既定のパフォーマンスを向上させました。実際、.NET Framework にそれを必要とするストリームはないと思いますが、カスタム ストリームの実装で必要になる場合があります。デフォルトではバッファリングを行いません。

于 2010-01-15T03:32:12.913 に答える
21

以下は、私が受講しているオンライン コースのテキストです。

BufferedStream クラスは、Stream クラスを拡張する具象クラスであり、同期と非同期の両方で、別の種類のストリームに追加のメモリ バッファーを提供するために使用されます。BufferedStream クラスは、クラスのインスタンスの作成時に読み取りまたは書き込みのいずれかを行うように構成する必要がありますが、両方のタスクを同時に実行するように BufferedStream を構成することはできません。

Microsoft は、組み込みのバッファーを含めることで、.NET Framework のすべてのストリームのパフォーマンスを向上させました。FileStream や MemoryStream などの既存のストリームに BufferedStream を適用することで、パフォーマンスが著しく向上しました。BufferedStream を既存の .NET Framework ストリームに適用すると、ダブル バッファーが発生します。

BufferedStream クラスの最も一般的な用途は、組み込みバッファーを含まないカスタム ストリーム クラスです。

于 2009-01-29T16:22:18.960 に答える
20

私が知っている最良のケースは、BinaryFormatterがNetworkStreamから直接シリアル化/逆シリアル化する場合です。間にBufferedStreamを使用すると、パフォーマンスが10倍向上します。

于 2011-09-05T07:11:17.963 に答える
5

通常のファイル I/O ストリームは、StreamReader/StreamWriter を使用して既にバッファリングされています。

ストリームに対する読み取り/書き込み操作は、通常、バイト配列を取る読み取り/書き込みメソッドを使用するため、当然、自分でバッファリングを提供します。

非常に小さな配列を使用する場合、または WriteByte を使用する場合は、その間に BufferedStream を使用するとパフォーマンスが向上する可能性があります。

于 2009-01-29T16:17:14.680 に答える
3

あらゆる場面で使用しなければならないは常識です。MemoryStreamからの読み取り/書き込みの際にこのクラスを利用することには意味がありませんが、ネットワークまたはディスクIOを実行する場合(これらのサブシステムのStreamsが独自にバッファリングを実行しない場合)に非常に役立つ場合があります。

于 2009-01-29T16:17:08.190 に答える