Оптимизация компилятора делегата C#

Я начал много использовать анонимных делегатов в C#, и я начал задаваться вопросом, насколько эффективен компилятор или среда выполнения для удаления их из кода, который фактически выполняется, и я нигде не видел этого подробно?

Достаточно ли он умен, чтобы встроить их и свернуть рекурсивное использование, которое может быть выведено статически?

3 ответа

Решение

Нет, компилятор C# не будет оптимизировать лямбда-выражение во встроенный код. Анонимные делегаты и лямбда-выражения всегда создают соответствующий делегат или дерево выражений. Это описано в разделе 6.5 спецификации языка C#

Выражение анонимного метода или лямбда-выражения классифицируется как анонимная функция (§7.14). Выражение не имеет типа, но может быть неявно преобразовано в совместимый тип делегата или тип дерева выражений.

В некоторых случаях лямбда будет кэшироваться и не будет воссоздана для будущего использования. Но это не будет встроено.

Компилятор C# никогда не оптимизирует их. Однако.NET JIT-компилятор может, если они достаточно просты.

В большинстве случаев нет, это не так.

Однако, если вы не заметили фактические проблемы с производительностью и не обнаружили их в профилировщике, вам не следует об этом беспокоиться.

Другие вопросы по тегам