c# - 禁用特定函数或代码块的编译器优化 (C#)

标签 c# .net optimization compact-framework compiler-optimization

编译器在针对 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/

相关文章:

c# - 在 .resx 中将图像存储为 byte[] 而不是 Bitmap

c# - C# 中的正则表达式过滤器

c# - 我什么时候不应该实现 IDisposable?

python - dict.get(key, default) 与 dict.get(key) 或 default

c++ - 使用二维或一维,哪个最快?

c# - 是否有 Visual Studio for .NET 开发的有力竞争者?

c# - 在为 aspx 页面编译动态程序集期间未触发 AssemblyResolve 事件

.net - 线程返回线程池后ExecutionContext是否被清除?

c# - 适用于 iOS 和 .Net 的类似 UI

java - 逻辑内联与调用方法的效率?