如何在C#中禁用编译器优化?

41 .net c#

如何在C#中禁用编译器优化?

Mar*_*ell 43

在命令行(csc), /optimize-

在IDE中,项目属性→构建→"优化代码"

对于某些 JIT优化,您可以使用[MethodImpl(...)]

  • 特别是对要跳过优化的方法使用[MethodImpl(MethodImplOptions.NoOptimization)].使用案例:在某些情况下,本机调用调用另一个本机调用,编译器将生成无效的IL代码,并且当您尝试运行它时,运行时将抛出InvalidProgramException.您可以关闭整个程序的优化,也可以选择对使用本机调用的方法使用[MethodImpl(MethodImplOptions.NoOptimization)].在我最近正在开发的一个应用程序中,我必须这样做才能解决这个问题... (10认同)
  • 在这种情况下,您希望将[MethodImpl(MethodImplOptions.NoInlining)]添加到C和D.这会通知编译器这些方法无法内联到调用者的实现中 (3认同)
  • [MethodImpl(MethodImplOptions.NoOptimization)] 根本不起作用。我已经把它放在调用堆栈中的每个方法上,但它没有效果。 (2认同)

Nic*_*ick 10

将配置设置为所有配置

设置优化代码复选框以取消选中

在此输入图像描述


Ign*_*cia 8

您可以使用.ini文件在运行时禁用优化:http://msdn.microsoft.com/en-us/library/9dd8z24x.aspx

在你的.ini中输入以下文字[例如Explorer.ini]

[.NET Framework Debugging Control] 
GenerateTrackingInfo=1 
AllowOptimize=0
Run Code Online (Sandbox Code Playgroud)


Bri*_*tle 2

在 Visual Studio 中,我相信您可以只创建一个调试版本,但它包含其他调试信息。项目属性(右键单击解决方案中的项目)使您可以访问管理编译的控件。

如果您使用 csc.exe 在命令行上构建,请参阅/optimize 参数 docs。如果不指定 /optimize,则不应优化程序集。