Ich arbeite an einer Math-Bibliothek 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.Inline-Erweiterung in C#
Meine spezifische Frage hat mit Gleitkommavergleich zu tun. Die sorten kanonischer Weise ist eine epsilon-Wert, zu definieren und um den Wert der Differenz zwischen den Gleitkommawerten vergleichen Nähe zu bestimmen, etwa so:
float Epsilon = 1.0e-6f;
bool FloatEq(float a, float b)
{
return Math.Abs(a - b) < Epsilon
}
Der Funktionsaufruf Overhead die Ist-Vergleich überschwemmen würden, Also würde diese triviale Funktion in C++ eingefügt werden, wird der C# -Compiler dies tun? Gibt es eine Möglichkeit, dem C# -Compiler mitzuteilen, dass eine Methode inline sein soll?
Der JIT kann über inlining ziemlich intelligent sein, wenn außerhalb des Debugger ausführen. Es kann beispielsweise die 'Math.Abs'-Methode selbst inline einbinden. –
Nun ist die Frage: Wird es in diesem Fall (unter der Annahme optimierten Code und kein Debugger)? – Mau
@Mau: Bearbeiten ... –