我正在将 x86 应用程序移动到 x64 并发现编译器没有内联函数。甚至很小(<32 字节 IL 甚至是空的)。即使使用编译器选项MethodImplOptions.AggressiveInlining
。
而在 x86 中,所有小函数(以及带有编译器选项的简单大函数)都被内联而没有问题。
x64 中有什么方法可以告诉编译器内联它们吗?
例如,以下带有“目标平台”= x86 的代码只是循环,而对于 x64 - 也调用 EmptyFunction() 1 亿次:
void LoopFunction()
{
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 100000000; i++)
{ EmptyFunction(); }
watch.Stop();
MessageBox.Show(watch.Elapsed.ToString());
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
void EmptyFunction() { }