编译器在优化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)的项目?
3条答案
按热度按时间rqdpfwrv1#
你可以用
[MethodImpl(MethodImplOptions.NoOptimization)]
和[MethodImpl(MethodImplOptions.NoInlining)]
修饰一个特定的方法(或者属性getter/setter),这将阻止JITter优化和内联该方法:但是,没有一种方法可以将此属性应用于代码块。另外,.NET 3.5中添加了
NoOptimization
属性,这对于遗留代码或Compact Framework可能很重要。7gcisfzg2#
这里有一个C# Preprocessor Directives的列表,但没有与C++
#pragma optimize
完全等效的。但是,可以使用MethodImplAttribute并像这样传递
NoOptimization
MethodImplOptions来实现这一点:nbysray53#
在C#中,没有与#pragma指令等效的指令。你所能做的就是禁用方法作用域。MethodImpl位于System.Runtime.CompilerServices中。