7

Reactive Extensions の System.Interactive.dll (v1.0.2521.0) には、メソッドとメソッドのEnumerableEx両方があります。API ドキュメントは、どちらも同じです。MemoizeMemoizeAll

元の列挙型を 1 回だけ列挙し、その結果をキャッシュする列挙型を作成します。

ただし、これらの方法は明らかに同一ではありません。を使用するMemoizeと、最初に列挙したときに列挙型に値があり、2 回目には空のように見えます。使用するMemoizeAllと、どちらのメソッドの説明からも期待できる動作が得られます。結果を何度でも列挙して、毎回同じ結果を得ることができますが、ソースは 1 回しか列挙されません。

これらの方法の意図的な違いは何ですか? ユースケースはMemoize何ですか?ドキュメントが非常に紛らわしいため、かなり役に立たない方法のようです。

4

1 に答える 1

7

簡単に言えば、MemoizeAll実際に使用するアイテムのみをキャッシュしますが、キャッシュされたすべてのアイテムを永久に保持します。 Memoizeアイテムをすぐにキャッシュしますが、最大で指定されたバッファー サイズまでです。これにより、メモリの使用などをより効率的に行うことができますが、列挙可能なソースのすべての消費者がそれをどのように使用するかを理解している場合にのみ、後者を使用する必要があります。

このブログ投稿には、違いについての非常に優れた説明があります 。 -side-effects.aspx

于 2010-05-28T18:57:29.553 に答える