2010-07-13 27 views
8

Estoy trabajando en una biblioteca matemática para mi motor DirectX 3D en C#. Estoy usando SlimDX, que es una maravillosa y potente biblioteca. SlimDX proporciona bastantes clases de matemática, pero en realidad son envoltorios alrededor de objetos D3DX nativos, así que aunque los objetos mismos son muy, muy rápidos, la interoperabilidad no es, supongo, porque mi código C# administrado los supera.Expansión en línea en C#

Mi pregunta específica tiene que ver con la comparación de coma flotante. La clase-de forma canónica es definir un valor de épsilon, y comparar el valor de la diferencia entre los valores de punto flotante para determinar la cercanía, así:

float Epsilon = 1.0e-6f; 
bool FloatEq(float a, float b) 
{ 
    return Math.Abs(a - b) < Epsilon 
} 

la función de llamada sobrecarga inundaría la comparación real, entonces esta función trivial estaría en línea en C++, ¿lo hará el compilador C#? ¿Hay alguna manera de decirle al compilador de C# que quiero un método en línea?

Respuesta

7

El compilador C# no realiza la alineación, pero el JIT puede hacerlo en este caso. Esa es ciertamente la pieza que sería realizar en línea, en todo caso.

EDITAR: esperaría esperar en línea en este caso, pero es difícil de decir sin cargar el código en algo así como cordbg con las optimizaciones de JIT activadas. Cada versión diferente de CLR puede tener diferentes ajustes en su línea (incluidos los CLR de 64 bit frente a 32 bit), por lo que soy reacio a decir algo demasiado definitivo.

+1

El JIT puede ser bastante inteligente sobre procesos en línea, cuando se ejecuta fuera del depurador. Puede en línea el método 'Math.Abs', por ejemplo. –

+0

Ahora la pregunta es: ¿LO HARÁ en este caso (suponiendo que hay un código optimizado y sin depurador)? – Mau

+0

@Mau: Edición ... –