3

データの潜在的に無限の「ストリーム」、つまりバイト、文字などを操作する関数を作成する場合、入力/出力に文字列/配列とストリームを使用することを決定する際の設計上の考慮事項は何ですか?

常にストリームを使用する関数を作成し、ストリーム ラッパー (つまり、StringReader/Writer) を使用して、破棄やその他の考慮事項を必要としない配列や文字列などの「単純なデータ」を返すオーバーロード メソッドを作成すると、パフォーマンスに大きな影響がありますか?

結果の配列を「返す」ことができ、通常は破棄について心配する必要がないため、配列を操作する関数ははるかに便利だと思います。ストリーム オペレーターは、無限のデータ ソースを操作でき、おそらくメモリ効率も高いため、優れていると思います。

4

2 に答える 2

1

サイズが不明なバイナリ データを扱う場合は、常にストリームを使用してください。たとえば、ファイル全体をバイト配列に読み込むことは、回避できる場合、通常は悪い考えです。暗号化や圧縮など、バイナリ データを扱う .Net のほとんどの関数は、ストリームを入出力として使用するように構築されています。

于 2012-05-06T21:01:57.660 に答える
1

データのストリームを処理する関数を作成している場合は、それをIEnumerable<T>. IEnumerable<T>その後、ストリームをジェネレーター関数のとして返すことができます。つまりreturn yield、各結果を 1 つずつ返すために使用します。

必要に応じて評価が行われるため、場合によってはパフォーマンスが漸近的に改善されることがあります。

于 2012-05-06T21:20:33.617 に答える