私は C# で匿名デリゲートを頻繁に使用し始めましたが、実際に実行されるコードからコンパイラまたはランタイムが匿名デリゲートを削除するのにどれだけ効率的か疑問に思い始めました。
それらをインライン化し、静的に推定できる再帰的な使用を折りたたむのは十分に賢いですか?
私は C# で匿名デリゲートを頻繁に使用し始めましたが、実際に実行されるコードからコンパイラまたはランタイムが匿名デリゲートを削除するのにどれだけ効率的か疑問に思い始めました。
それらをインライン化し、静的に推定できる再帰的な使用を折りたたむのは十分に賢いですか?
いいえ、C# コンパイラはラムダ式をインライン コードに最適化しません。匿名デリゲートとラムダ式は、常に対応するデリゲートまたは式ツリーを生成します。これは、C# 言語仕様のセクション 6.5 でカバーされています。
匿名メソッド式またはラムダ式は、匿名関数として分類されます (§7.14)。式には型がありませんが、互換性のあるデリゲート型または式ツリー型に暗黙的に変換できます
場合によっては、ラムダがキャッシュされ、将来の使用のために再作成されません。ただし、インライン化されません。
ほとんどの場合、いいえ、そうではありません。
ただし、実際のパフォーマンスの問題に気付き、プロファイラーで追跡していない限り、心配する必要はありません。
C# コンパイラはそれらを最適化しません。ただし、.NET JIT コンパイラは、十分に単純であれば可能性があります。