Pregunta

Estoy trabajando en una biblioteca de matemáticas para mi motor DIRECTX 3D en C #.Estoy usando Slimdx, que es una biblioteca maravillosa y poderosa.Slimdx ofrece bastantes clases de matemáticas, pero en realidad son envoltorios alrededor de los objetos D3DX nativos, por lo que mientras los objetos en sí mismos son muy, muy rápidos, la interrupción no es que supongo, porque mi código C # administrado los superó.

Mi pregunta específica tiene que ver con la comparación de puntos flotantes.El tipo de camino canónico es definir un valor de EPSILON y comparar el valor a la diferencia entre los valores de punto flotante para determinar la cercanía, como SO:

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

La sobrecarga de la llamada de la función cambiaría la comparación real, por lo que esta función trivial estaría enlineada en C ++, ¿el compilador C # hará esto?¿Hay alguna manera de decirle al compilador C # que quiero un método enlinado?

¿Fue útil?

Solución

El compilador C # no se realiza en la entrada, pero el JIT puede hacerlo en este caso.Eso es ciertamente la pieza que lo haría realizando en línea, en todo caso.

Editar: Lo haría esperar en línea en este caso, pero es difícil decirlo sin cargar el código en algo como Cordbg con optimizaciones de JIT activadas.Cada versión CLR diferente puede tener ajustes diferentes a su enlining (incluido el CLRS de 64 bits vs 32 bits), por lo que me muestro reacio a decir algo demasiado definido.

Otros consejos

Aquí hay alguna información sobre las circunstancias en las que el JIT no realizará el INICIO;

http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top