例:
- ファイルを読み取って .NET Streams を介して別のファイルにコピーすると、ファイルの合計サイズがいつでもメモリを占有しますか? それとも、バイトが使用されるとすぐに破棄されますか?
- 単純なアプローチでメモリが節約されない場合、バッファリングされたストリームはそれを行いますか?
ReadToEnd()
yes のようなものを呼び出すと、ファイルの内容がメモリにロードされます。バッファを使用することが、ファイルのデータのサブセットのみが常にメモリにロードされるようにするための適切なアプローチであると推測するのは正しいことです。
いいえ、ファイル全体がメモリにロードされることはありません。
メモリ使用量は、読み取りと書き込みに使用するバッファーのサイズと、ストリームによって維持される内部バッファーによって異なります。
FileStream クラスは、コンストラクターのオーバーロードでサイズを指定でき、デフォルトで 0x1000 バイトに設定される内部バッファーを使用します (おそらく実装に依存 - この値は、Lutz Reflector を使用して FileStream クラスを調べることによって取得されました)。
それは本当にあなたの方法論に依存します。でストリームを一時的なエンドポイントとして使用している場合はReadToEnd()
、ファイル全体をメモリにロードできます。代わりにバッファリングしている場合は、バッファ サイズを超えるオーバーヘッドを使用することはありません。