【问题标题】:Why does generated IL code start with a Nop?为什么生成的 IL 代码以 Nop 开头?
【发布时间】:2011-06-03 04:29:16
【问题描述】:

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

有人知道这是为什么吗?

【问题讨论】:

    标签: .net il nop


    【解决方案1】:

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

    提示

    如果您需要一个额外的断点来进行调试,您可以通过添加一对空括号来强制在调试版本中包含Nop,例如

    _grid.PreviewMouseRightButtonDown += (sender, e) =>
    {
        _isRightMouseDown = true;
    
        RowColumnIndex cell = _grid.PointToCellRowColumnIndex(e);
        {} //<------ Adding a Nop allows a breakpoint here.
    };
    

    【讨论】:

    • @YellPika 是的。他们无所事事地浪费周期。它们是使调试构建速度变慢的原因之一。
    • JIT 编译器应该在本机指令流之外优化它们。
    • @devstuff 我说的是调试版本——它们没有优化。如果是这样的话,我不会把它作为小费添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 2011-11-06
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多