5

関数を何らかの方法でマークできるようにしたいと思います (おそらく属性でしょうか?) どこからでも呼び出されたときに、他のコードがパラメーターを処理し、呼び出された関数の代わりに値を返すか、関数を正常に実行できるようにします。

簡単なキャッシングに使用します。

たとえば、Add10 という関数があった場合、次のようになります。

int Add10 (int n)
{
    return n + 10;
}

関数が同じ値 (Add10(7)) で繰り返し呼び出された場合、常に同じ結果 (17) が返されるため、毎回再計算しても意味がありません。当然、これほど単純な関数では実行しませんが、私の言いたいことは理解できると思います。

C# は、私がやりたいことを行う方法を提供していますか? 関数をキャッシュ済みとしてマークする方法が必要です。これにより、誰かが Add10(16) を実行したときに、どこかのコードが最初に実行されて辞書にチェックインされます。これは、Add10 の値が 16 であることを既に知っており、計算、保存、および実行した場合にそれを返します。そうでない場合は戻ります。

4

4 に答える 4

3

関数をメモ化したい。1 つの方法を次に示します。

http://blogs.msdn.com/b/wesdyer/archive/2007/01/26/function-memoization.aspx

于 2012-05-01T13:43:46.140 に答える
0

MbCacheが探しているものかもしれません。

于 2012-06-12T20:57:28.150 に答える
0

関数の代わりに、Func<> デリゲートを公開します。

Func<int, int> add10 = (n) =>
{
    // do some other work
    ...

    int result = Add10(n); // calling actual function

    // do some more perhaps even change result
    ...

    return result;

};

その後:

int res = add10(5); // invoking the delegate rather than calling function
于 2012-05-01T13:51:18.007 に答える
0

Jason が述べたように、おそらくfunction memoizationのようなものが必要です。

それに関する別のSOスレッドがあります: 関数の結果をキャッシュ/メモ化するのは誰の責任ですか?

アスペクト指向プログラミングに関連する原則を使用して、この種の機能を実現することもできます。

http://msdn.microsoft.com/en-us/magazine/gg490353.aspx

C# でのアスペクト指向プログラミング

于 2012-05-01T13:53:04.467 に答える