title: 关于MSIL中的Nop的问题？
desc: 由于项目需要，在写一个动态代理的东西，需要用Emit动态构造类型，基本已经写完了，但是将自己整的ilgenerator和手写Ccode ildasm反汇编出来的比对一下，发现C编译成的ildasm有很多nop指令，想详细的了解一下这个指令对程序运行的性能有什么影响（我只知道它是补齐操作码啥的，很泛泛，想具体了解一下细节和为啥要用它的原因以及什么情况下用和不用的影响等等）谢谢百忙之中抽出时间解答的各位
topic: C#
content: 请用release模式编译，您会发现那些nop就没了。那些nop是跟csc与CLR配合实现的代码可调试性相关的。借助Roslyn的实现可以一窥这些nop生成的逻辑都是在干什么。例如说， roslynCodeGenerator.cs at 8fdc0214f73fd513e5b513573f8f916e02362961 dotnetroslyn GitHub if instructionsEmitted 0 syntax null optimizations OptimizationLevel.Debug if there was no code emitted， then emit nop
answerer_tags: 软件工程师、主攻高级编程语言虚拟机的设计与实现