Inline-Erweiterung in C #
-
14-09-2020 - |
Frage
Ich arbeite an einer Math-Bibliothek für meinen DirectX-3D-Motor in C #.Ich benutze SlimDX, das ist ein wunderbarer und leistungsstarker Bibliothek.SlimDX bietet ein paar mathematische Klassen an, aber sie sind eigentlich Wrapper um native D3DX-Objekte, so dass die Objekte selbst sehr schnell sind, der Interop ist nicht, weil mein verwalteter C #-Code sie übertreibt.
Meine spezifische Frage hat mit dem Floating-Point-Vergleich zu tun.Die sortierte kanonische Möglichkeit besteht darin, einen Epsilon-Wert zu definieren und den Wert auf die Differenz zwischen den Fließkommawerten zu vergleichen, um die Nähe zu bestimmen, wie somit:
generasacodicetagpre.Der Funktionsaufruf-Overhead würde den tatsächlichen Vergleich süßen, sodass diese triviale Funktion in C ++ einteilig ist, wird der C # -Compiler dies tun?Gibt es eine Möglichkeit, dem C # -Compiler zu sagen, dass ich eine Methode in Verbindung stehend?
Lösung
Der C # -Compiler führt nicht eintrifft - aber das Jit kann dies in diesem Fall gut tun.Das ist sicherlich das Stück, das das Einführen von tun würde, wenn irgendetwas.
edit: Ich würde erwarten es in diesem Fall auf Inline, aber es ist schwer zu erkennen, ohne den Code in so etwas wie CORDBG mit JIT-Optimierungen eingeschaltet zu lassen.Jede andere CLR-Version hat möglicherweise unterschiedliche Tweaks an seinem Einlufung (einschließlich der 64-Bit-Vs 32-Bit-Clrs), daher zögere ich, etwas zu definitiv zu sagen.
Andere Tipps
Hier sind einige Informationen über die Umstände, unter denen das JIT nicht einleitend funktioniert;
http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx