ラムダ式で、ラムダ式外部の変数を使っているか、いないかによって処理が少し最適化されているようです。
var val =10;var func = new Func<int32>(()=>;val);
コードを見てみると、上記のような場合には、そのままの形になっています。
var func = new Func<int32>(()=>; { int a = 10; return a*a; } );
このような形でラムダ式の外側の変数を使用しない場合には、
ラムダ式用のinnnerクラスを持ち、static関数を呼び出す形に最適化されているようです。
[Serializable]private sealed class innerclass{ public static readonly Program.innerclass inclass = new Program.innerclass();
public static Func<int> func;
internal int method() { return 1; }}
private static void Main( string[] args ){ if( Program.innerclass.func == null ) { Program.innerclass.func = new Func<int>( Program.innerclass.inclass.method ); }}
基本的に、外部の変数を使用していない場合のみなので、
スレッドには影響しません。
以上です。だからどうしたといわれそうですが、それだけです。
0 件のコメント:
コメントを投稿