Я начал использовать анонимных делегатов много в C#, и я начал задаваться вопросом, насколько эффективный компилятор или время выполнения находятся в удалении их из кода, который на самом деле выполняется, и я не видел, что это детализировало где-нибудь?
Действительно ли это достаточно умно вообще, чтобы встроить их и свернуть рекурсивное использование, которое могло быть статически выведено?
Нет, компилятор C# не будет оптимизировать лямбда-выражение в инлайн-код. Анонимные делегаты и лямбда-выражения всегда будут создавать соответствующий делегат или дерево выражений. Об этом говорится в разделе 6.5 спецификации языка C#
Анонимное выражение-метод или лямбда-выражение классифицируется как анонимная функция (§7.14). Выражение не имеет типа, но может быть неявно преобразовано в совместимый тип делегата или тип дерева выражений
В некоторых случаях лямбда будет кэшироваться и не воссоздаваться для дальнейшего использования. Но она не будет инкрустирована.
В большинстве случаев нет.
Однако, если вы не замечаете реальных проблем с производительностью и не отследили их в профилировщике, вам не стоит беспокоиться об этом.
Компилятор C# никогда не оптимизирует их. Однако JIT-компилятор .NET может, если они достаточно просты.