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

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

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

8
задан AMissico 2 June 2010 в 14:06
поделиться

3 ответа

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

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

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

3
ответ дан 5 December 2019 в 21:16
поделиться

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

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

2
ответ дан 5 December 2019 в 21:16
поделиться

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

2
ответ дан 5 December 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: