1. 两个代码优化选项
托管代码的两个优化选项将方法的首次编译开销保持在最低限度,并且JIT编译器能判别CPU的指令集,并生成相应本地代码利用能提升程序性能的特殊指令,相对非托管代码(eg:C++是针对一种具体CPU【平台】编译的,一旦调用,代码直接就能执行)其效率相差不大,甚至因为一些特殊指令性能更好。
1) /optimize
影响IL代码的优化,优化后EXE/DLL文件更小,查看IL代码更易理解。
影响JIT本地代码的优化;
未优化的IL代码中包含许多NOP(no-operation,空操作)指令;还包含许多分支指令,它们用于跳到下一行代码。利用这些指令,VS可提供调试期间的“编辑并运行”(edit-and-continue)功能。另外,利用这些额外的指令,还可以在控制流程指令(比如for,while,do,if,else,try,catch和finally语句块)上设置断电,使代码更容易调试(控制流程未被优化)。
2) /debug
影响JIT本地代码的优化;
只有指定/debug(+/full/pdbonly)开关编译器才会生成一个Program Database(PDB)文件。PDB文件帮助调试器查找局部变量并将指令映射到源代码。
/debug:full 编译器会帮你记录每一条IL指令所生成的本地代码。这样可利用VS的JIT调试器功能,将一个调试器连接到一个正在运行的进程,并方便地对源代码进行调试。
/debug:pdbonly 允许在调试器中启动程序时进行源代码调试。
2. C#编译器选项
参考资料:
(MSDN)C# 编译器选项