Ala*_*inD 22 .net c# optimization compact-framework compiler-optimization
编译器在优化RELEASE构建方面做得很好,但有时候确保为本地函数关闭优化(但不是通过unticking来关闭整个项目Project Options > Optimize code)会很有用.
在C++中,这是使用以下内容实现的(#pragma通常注释掉):
#pragma optimize( "", off )
// Some code such as a function (but not the whole project)
#pragma optimize( "", on )
Run Code Online (Sandbox Code Playgroud)
C#中有等价物吗?
几个很好的答案建议用这个方法装饰MethodImplOptions.NoOptimization.这是在.NET 3.5中实现的,但不是在Compact Framework(CF)版本中.一个相关的后续问题是,是否相当于:
* projects targeting .NET 3.0 or earlier?
* projects deployed to a device such as Windows CE 6.0 using the .NET 3.5 CF?
Run Code Online (Sandbox Code Playgroud)
Gro*_*roo 32
您可以装饰用特定的方法(或属性的getter/setter)[MethodImpl(MethodImplOptions.NoOptimization)]和[MethodImpl(MethodImplOptions.NoInlining)],这将防止抖动的优化和内联方法:
[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
private void MethodWhichShouldNotBeOptimized()
{ }
Run Code Online (Sandbox Code Playgroud)
但是,没有办法将此属性应用于代码块.此外NoOptimization,.NET 3.5中还添加了属性,这可能对遗留代码或Compact Framework很重要.
有一个C#预处理器指令列表.没有完全等效,但它是可以做到这一点使用MethodImplAttribute并向其传递NoOptimization MethodImplOptions是这样的:
using System.Runtime.CompilerServices;
class MyClass
{
[MethodImplAttribute(MethodImplOptions.NoOptimization)]
public void NonOptimizeMethod()
{
// Do some stuff
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
在c#中,没有等效于#pragma指令。您所能做的就是禁用方法范围。MethodImpl在System.Runtime.CompilerServices中。
[MethodImpl(MethodImplOptions.NoOptimization)]
void TargetMethod ()
Run Code Online (Sandbox Code Playgroud)