1

これはTypeのCompileメソッドに関するすべてです。Expression私は遅刻したので、ナイーブで申し訳ありません。実行可能コードを動的に変更できるようにするための式の構築について読んでいます。そして、入力/環境が変化する限り(特定の定数/パラメーター/メンバー式の異なる値の場合など)、特定の式ツリーからラムダ式を発行することになると、それは私にとって理にかなっています。環境に変更がなければ、式ツリーから生成/コンパイルされたラムダをキャッシュ (再利用) できれば理想的だと思います。

質問: 環境に変更がない場合でも、CLR は常にラムダ式を発行しますか? もしそうなら、環境に変化がない場合、ラムダからの式のコンパイルを避けるのが最善でしたか?

4

3 に答える 3

3

CLR はラムダ式をキャッシュせず、Compile()毎回新しいデリゲートを返します。

ただし、次のような方法で簡単にキャッシュできるはずです。

public Func<T> Get<T>(Expression<Func<T>> expression)
{
    string key = expression.Body.ToString();

    Func<T> result;
    if (!_cache.TryGetValue(key, out result)) {
        result = expression.Compile();
        _cache.Add(key, result);
    }

    return result;
}
于 2013-06-17T15:34:49.277 に答える