Estaba rastreando algunos de los IL de uno de mis ensamblajes (a través de ILDasm) y noté que todos mis métodos comienzan con una instrucciónnop
.¿Por qué el código IL generado comienza con un Nop?
¿Alguien sabe por qué es así?
Estaba rastreando algunos de los IL de uno de mis ensamblajes (a través de ILDasm) y noté que todos mis métodos comienzan con una instrucciónnop
.¿Por qué el código IL generado comienza con un Nop?
¿Alguien sabe por qué es así?
El ensamblado se compiló en modo de depuración. Nop
las instrucciones no hacen nada (es decir, no tienen efectos secundarios), pero actúan como instrucciones convenientes para colocar un punto de interrupción.
Consejo
Si usted necesita un lugar para un punto de corte adicional para propósitos de depuración, puede forzar la inclusión de un Nop
en una versión de depuración mediante la adición de un par de llaves vacías, por ejemplo,
_grid.PreviewMouseRightButtonDown += (sender, e) =>
{
_isRightMouseDown = true;
RowColumnIndex cell = _grid.PointToCellRowColumnIndex(e);
{} //<------ Adding a Nop allows a breakpoint here.
};
¿Se pierden los ciclos? – YellPika
@YellPika Sí lo hacen. Pierden ciclos sin hacer nada. Son una de las cosas que hacen que las versiones de depuración sean más lentas. –
El compilador JIT debería optimizarlos fuera del flujo de instrucciones nativas. – devstuff