我试图在我的游戏中实现 OpenSimplex Noise https://gist.github.com/digitalshadow/134a3a02b67cecd72181,但我收到错误“‘MethodImplOptions’不包含‘AggressiveInlining’的定义”。
[ MethodImpl(MethodImplOptions.AggressiveInlining)]
private static int FastFloor(double x)
{
var xi = (int)x;
return x < xi ? xi - 1 : xi;
}
是的,我包含了
using System.Runtime.CompilerServices;
。现在,老实说,我不知道内联是如何工作的,所以我什至不知道 Unity 中的程序是否有必要这样做。如果我不需要它,我想知道用什么代替。提前致谢。 最佳答案
MethodImplOptions.AggressiveInlining
枚举不存在,因为此功能是在 .NET 4.5 中添加的,而 Unity 仍在使用 .NET 2.0/3.5。
这不是必需的,但它似乎加快了函数调用的速度。您可以看到速度测试 here 。
您可以使用 [MethodImpl(256)]
而不是 MethodImplOptions.AggressiveInlining
。这也应该有效。
查看下面 MethodImplOptions
枚举的源代码:
public enum MethodImplOptions {
Unmanaged = 4,
ForwardRef = 16,
InternalCall = 4096,
Synchronized = 32,
NoInlining = 8,
PreserveSig = 128,
NoOptimization = 64,
#if NET_4_5
AggressiveInlining = 256,
#endif
} // MethodImplOptions
如您所见,
AggressiveInlining
的值为 256
。当您将 MethodImplAttribute
构造重载与 int
参数一起使用时,您基本上可以使用任何不存在的 enum
值。传递 256
应该会在任何 .NET 版本上为您提供 AggressiveInlining
。新的枚举值只是为了更容易记住/使用。另一个 source 来自 Unity Engineer:
关于c# - AggressiveInlining 不存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43060376/