在 Visual Studio C/C++ 项目中,很容易在“属性页 | C/C++ | 优化”中修改编译器的优化设置。例如,我们可能会给出不同的优化级别如 /O2 和 /O3,以及高级优化如“省略帧指针”。
但是,我不能简单地在 Visual Studio 的 C# 项目中找到相应的 UI。我能找到的只是关闭优化:“优化代码”复选框就是我所拥有的。
C# 用户可以像 C/C++ 一样控制详细的编译器优化吗?我必须在命令行中提供编译器选项吗?
在 Visual Studio C/C++ 项目中,很容易在“属性页 | C/C++ | 优化”中修改编译器的优化设置。例如,我们可能会给出不同的优化级别如 /O2 和 /O3,以及高级优化如“省略帧指针”。
但是,我不能简单地在 Visual Studio 的 C# 项目中找到相应的 UI。我能找到的只是关闭优化:“优化代码”复选框就是我所拥有的。
C# 用户可以像 C/C++ 一样控制详细的编译器优化吗?我必须在命令行中提供编译器选项吗?
C# 代码的大部分优化都在 JIT 编译器级别进行,而不是 C# 编译器。基本上没有 C 或 C++ 中可用的详细设置。
运行时有一些与性能相关的元素可以调整,例如 GC 策略,但不是很多。
当我从命令行构建基准测试等时,我倾向于使用这样的东西:
csc /o+ /debug- Test.cs
(我相信我已经看到匹配的 pdb 文件的存在对性能产生了影响,可能是在抛出异常的成本方面,因此debug-
切换......但我可能是错的。)
编辑:如果您想查看每一点优化的不同之处,有一种方法可能会很有趣:
AFAIK C# 编译器没有如此详细的优化属性。可能优化已启用或禁用。
http://msdn.microsoft.com/en-us/library/6s2x2bzy.aspx
我只找到了两个:
/filealign
指定输出文件中节的大小。
/optimize
启用/禁用优化。
有点 OT,但看这个问题的人可能会觉得这很有用:
将此添加到方法签名:[MethodImpl(MethodImplOptions.NoOptimization)]
关闭该方法的编译器优化。