5

例:

  1. ファイルを読み取って .NET Streams を介して別のファイルにコピーすると、ファイルの合計サイズがいつでもメモリを占有しますか? それとも、バイトが使用されるとすぐに破棄されますか?
  2. 単純なアプローチでメモリが節約されない場合、バッファリングされたストリームはそれを行いますか?
4

4 に答える 4

3

ReadToEnd()yes のようなものを呼び出すと、ファイルの内容がメモリにロードされます。バッファを使用することが、ファイルのデータのサブセットのみが常にメモリにロードされるようにするための適切なアプローチであると推測するのは正しいことです。

于 2009-02-26T19:10:21.270 に答える
2

いいえ、ファイル全体がメモリにロードされることはありません。

メモリ使用量は、読み取りと書き込みに使用するバッファーのサイズと、ストリームによって維持される内部バッファーによって異なります。

FileStream クラスは、コンストラクターのオーバーロードでサイズを指定でき、デフォルトで 0x1000 バイトに設定される内部バッファーを使用します (おそらく実装に依存 - この値は、Lutz Reflector を使用して FileStream クラスを調べることによって取得されました)。

于 2009-02-26T19:13:35.383 に答える
1

それは本当にあなたの方法論に依存します。でストリームを一時的なエンドポイントとして使用している場合はReadToEnd()、ファイル全体をメモリにロードできます。代わりにバッファリングしている場合は、バッファ サイズを超えるオーバーヘッドを使用することはありません。

于 2009-02-26T19:20:48.377 に答える