编译器在针对 RELEASE 构建进行优化方面做得很好,但偶尔确保关闭局部函数的优化可能很有用(但不是通过取消选中 Project Options > Optimize code来关闭整个项目)
).
在 C++ 中,这是通过以下方式实现的(#pragma
通常被注释掉):
#pragma optimize( "", off )
// Some code such as a function (but not the whole project)
#pragma optimize( "", on )
C# 中是否有等效项?
更新
几个很好的答案建议用 MethodImplOptions.NoOptimization
修饰方法。这是在 .NET 3.5 中实现的,但不是在 Compact Framework (CF) 版本中。一个相关的后续问题是是否有等同于:
- 针对 .NET 3.0 或更早版本的项目?
- 使用 .NET 3.5 CF 将项目部署到 Windows CE 6.0 等设备上?
最佳答案
您可以使用 [MethodImpl(MethodImplOptions.NoOptimization)]
和 [MethodImpl(MethodImplOptions.NoInlining)]
装饰特定方法(或属性 getter/setter),这将阻止 JITter 优化和内联该方法:
[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
private void MethodWhichShouldNotBeOptimized()
{ }
但是,没有办法将此属性应用于代码块。 .NET 3.5 中还添加了 NoOptimization
属性,这对于遗留代码或 Compact Framework 可能很重要。
关于c# - 禁用特定函数或代码块的编译器优化 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38632939/