Ich arbeite an einer Mathebibliothek für meine DirectX 3D Engine in C #. Ich verwende SlimDX, eine wunderbar zusammengestellte und leistungsstarke Bibliothek. SlimDX bietet eine ganze Reihe von Mathe-Klassen, aber sie sind eigentlich Wrapper um native D3DX-Objekte. Obwohl die Objekte selbst sehr, sehr schnell sind, nehme ich nicht an, dass mein verwaltetes C # -Code besser abschneidet.
Meine spezifische Frage hat mit Gleitkommavergleich zu tun. Die Art der kanonischen Methode besteht darin, einen Epsilon-Wert zu definieren und den Wert mit dem Unterschied zwischen den Gleitkommawerten zu vergleichen, um die Nähe zu bestimmen:
%Vor%Der Funktionsaufruf-Overhead würde den tatsächlichen Vergleich überfluten, so dass diese triviale Funktion in C ++ inline eingefügt wäre, wird der C # -Compiler das tun? Gibt es eine Möglichkeit, dem C # -Compiler mitzuteilen, dass ich eine Methode inline haben möchte?
Der C # -Compiler führt kein Inlining durch - aber das JIT kann dies in diesem Fall tun. Das ist sicherlich das Stück, das inlining durchführen würde, wenn überhaupt.
EDIT: Ich würde erwarten, dass es in diesem Fall inline ist, aber es ist schwer zu sagen, ohne den Code in etwas wie cordbg zu laden, wenn die JIT-Optimierung eingeschaltet ist. Jede andere CLR-Version kann durchaus andere Verbesserungen als die Inlining-Funktion haben (einschließlich 64-Bit- und 32-Bit-CLRs). Daher möchte ich nichts Bestimmtes sagen.
Hier finden Sie einige Informationen zu den Umständen, unter denen das JIT kein Inlining durchführen wird;
Tags und Links c# performance inlining