Я пробирался через некоторые из Ил одной из моих сборок (через ILDasm), и я заметил, что все мои методы начинаются с инструкцииnop
.Почему сгенерированный код IL начинается с Nop?
Кто-нибудь знает, почему это так?
Я пробирался через некоторые из Ил одной из моих сборок (через ILDasm), и я заметил, что все мои методы начинаются с инструкцииnop
.Почему сгенерированный код IL начинается с Nop?
Кто-нибудь знает, почему это так?
Сборка была скомпилирована в режиме отладки. Nop
инструкции ничего не делают (у меня нет побочных эффектов), но действуют как удобная инструкция для размещения точки останова.
Совет
Если вам нужно место для дополнительной точки останова для отладки, вы можете принудительно включить в Nop
в отладочных, добавив пару пустых скобок, например,
_grid.PreviewMouseRightButtonDown += (sender, e) =>
{
_isRightMouseDown = true;
RowColumnIndex cell = _grid.PointToCellRowColumnIndex(e);
{} //<------ Adding a Nop allows a breakpoint here.
};
Не тратьте ли они циклы? – YellPika
@YellPika Да, они делают. Они тратят циклы, ничего не делая. Они являются одной из вещей, которые делают отладочные сборки медленнее. –
Компилятор JIT должен оптимизировать их из потока собственных команд. – devstuff