2013-09-17 4 views
2

Мое понимание JIT-компилятора очень просто. Насколько я понимаю, первый раз, когда компилятор JIT попадает в кусок кода MSIL, он скомпилирован в собственный код и хранится в памяти для последующего использования (поэтому компилятору JIT не нужно снова компилировать тот же код MSIL).Компилятор JIT и обработчики событий в .NET

Это та же идея для обработчиков событий? Когда событие возникает в приложении, компилятор JIT компилирует код в обработчике события для этого события во время выполнения? Если это так, то скомпилированный собственный код кэшируется?

ответ

2

Это та же идея для обработчиков событий?

Обработчик событий - это просто делегат, который, в свою очередь, всегда будет ссылаться на метод. Поскольку JIT будет компилировать метод и кэшировать его, то же самое происходит для всех обработчиков событий, поскольку они являются базовым кодом, это всего лишь метод.

Если вы имеете в виду обработчиков событий, определенных и записанных с помощью lambda expression, то есть:

SomeEvent += (o,e) => DoFoo(); 

Внутренне, это еще нормальный метод. Компилятор преобразует лямбда в обычный метод в скомпилированном ИЛ. То же самое верно для anonymous methods.

+0

Значит, термин «обработчик событий» относится к делегату (ссылка на метод) или самому методу? – Rohan

+0

@RoK Это зависит от того, как вы к нему обращаетесь - но, как правило, делегат является обработчиком, связанным с событием, которое просто ссылается на метод. –

Смежные вопросы