x86アプリケーションをx64に移動していますが、コンパイラーによって関数がインライン化されていないことがわかりました。小さい場合でも(<32バイトIL、さらには空)。コンパイラオプションを使用してもMethodImplOptions.AggressiveInlining
。
x86では、すべての小さな関数(およびコンパイラオプションを使用した単純な大きな関数)が問題なくインライン化されます。
x64で、コンパイラにインライン化するように指示する方法はありますか?
たとえば、「TargetPlatform」= 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() { }