Inline-Erweiterung in C #

8

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?

    
Chris D. 13.07.2010, 11:13
quelle

2 Antworten

7

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.

    
Jon Skeet 13.07.2010, 11:14
quelle
1

Hier finden Sie einige Informationen zu den Umständen, unter denen das JIT kein Inlining durchführen wird;

Ссылка

    
Christopher McAtackney 13.07.2010 11:22
quelle

Tags und Links