4

在 Visual Studio C/C++ 项目中,很容易在“属性页 | C/C++ | 优化”中修改编译器的优化设置。例如,我们可能会给出不同的优化级别如 /O2 和 /O3,以及高级优化如“省略帧指针”。

但是,我不能简单地在 Visual Studio 的 C# 项目中找到相应的 UI。我能找到的只是关闭优化:“优化代码”复选框就是我所拥有的。

C# 用户可以像 C/C++ 一样控制详细的编译器优化吗?我必须在命令行中提供编译器选项吗?

替代文字

4

3 回答 3

9

C# 代码的大部分优化都在 JIT 编译器级别进行,而不是 C# 编译器。基本上没有 C 或 C++ 中可用的详细设置。

运行时有一些与性能相关的元素可以调整,例如 GC 策略,但不是很多。

当我从命令行构建基准测试等时,我倾向于使用这样的东西:

csc /o+ /debug- Test.cs

(我相信我已经看到匹配的 pdb 文件的存在对性能产生了影响,可能是在抛出异常的成本方面,因此debug-切换......但我可能是错的。)

编辑:如果您想查看每一点优化的不同之处,有一种方法可能会很有趣:

  • 在优化和不优化的情况下编译相同的代码
  • 在 IL 模式下使用 ildasm 或 Reflector 看看有什么区别
  • 手动一次应用相同的更改(使用 ilasm)并测量每个更改有多少
于 2010-07-12T06:01:42.527 回答
4

AFAIK C# 编译器没有如此详细的优化属性。可能优化已启用或禁用。


http://msdn.microsoft.com/en-us/library/6s2x2bzy.aspx

我只找到了两个:

  • /filealign指定输出文件中节的大小。

  • /optimize启用/禁用优化。

于 2010-07-12T05:55:25.193 回答
1

有点 OT,但看这个问题的人可能会觉得这很有用:

将此添加到方法签名:[MethodImpl(MethodImplOptions.NoOptimization)]

关闭该方法的编译器优化。

有关详细信息,请参见此处: https ://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

于 2015-03-18T11:08:24.317 回答