Stavo navigando attraverso l'IL di uno dei miei assembly (tramite ILDasm) e ho notato che tutti i miei metodi iniziano con un'istruzionenop
.Perché il codice IL generato inizia con un Nop?
Qualcuno sa perché è?
Stavo navigando attraverso l'IL di uno dei miei assembly (tramite ILDasm) e ho notato che tutti i miei metodi iniziano con un'istruzionenop
.Perché il codice IL generato inizia con un Nop?
Qualcuno sa perché è?
L'assembly è stato compilato in modalità di debug. Le istruzioni Nop
non fanno nulla (non hanno effetti collaterali), ma fungono da istruzioni pratiche per posizionare un punto di interruzione.
Tip
Se avete bisogno di un posto per un punto di interruzione aggiuntivo per il debug, è possibile forzare l'inserimento di un Nop
in una build di debug con l'aggiunta di un paio di parentesi graffe vuote, ad esempio,
_grid.PreviewMouseRightButtonDown += (sender, e) =>
{
_isRightMouseDown = true;
RowColumnIndex cell = _grid.PointToCellRowColumnIndex(e);
{} //<------ Adding a Nop allows a breakpoint here.
};
Sono cicli di rifiuti? – YellPika
@YellPika Sì, lo fanno. Sprecano cicli senza fare nulla. Sono una delle cose che rallentano le build di debug. –
Il compilatore JIT dovrebbe tuttavia ottimizzarli fuori dal flusso di istruzioni nativo. – devstuff