为什么生成的IL代码以Nop开头?

Yel*_*ika 21 .net il nop

我正在浏览我的一个程序集的某些IL(通过ILDasm),我注意到我的所有方法都以一条 指令开头nop .

有谁知道那是为什么?

Tim*_*oyd 35

程序集是在调试模式下编译的.Nop指令不做任何事情(即没有副作用),但作为放置断点的方便指令.

小费

如果你需要一个额外的断点用于调试目的,你可以Nop通过添加一对空括号强制在一个Debug构建中包含一个,例如

_grid.PreviewMouseRightButtonDown += (sender, e) =>
{
    _isRightMouseDown = true;

    RowColumnIndex cell = _grid.PointToCellRowColumnIndex(e);
    {} //<------ Adding a Nop allows a breakpoint here.
};
Run Code Online (Sandbox Code Playgroud)

  • @YelPika是的,他们这样做.他们浪费周期无所事事.它们是使调试构建变慢的原因之一. (5认同)
  • 空括号专业提示+1! (3认同)
  • 他们浪费周期吗? (2认同)