Question

Je travaille sur une bibliothèque de mathématiques pour mon moteur 3D DirectX 3D en C #.J'utilise SLIMDX, qui est un merveilleux mis en place et une bibliothèque puissante.SLIMDX fournit des cours de mathématiques assez nombreux, mais ils sont en fait des emballages autour des objets natifs D3DX, alors que les objets eux-mêmes sont très très rapides, l'Interop n'est pas que je présume, car mon code C # géré les surpasse.

Ma question spécifique concerne la comparaison de points flottants.La sorte de manière canonique est de définir une valeur epsilon et de comparer la valeur à la différence entre les valeurs de point flottant pour déterminer la proximité, comme:

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

La fonction d'appel de la fonction mettrait la comparaison réelle. Cette fonction triviale serait donc inlinée en C ++, le compilateur C # fera-t-il cela?Y a-t-il un moyen de dire au compilateur C # que je veux une méthode inline?

Était-ce utile?

La solution

Le compilateur C # n'effectue pas l'inlinage - mais le JIT peut bien le faire dans ce cas.C'est certainement la pièce qui serait l'allusion, si quelque chose.

EDIT: Je voudrais Attendez-vous en ligne dans ce cas, mais il est difficile de dire sans charger le code dans quelque chose comme Cordbg avec des optimisations JIT activées.Chaque version de CLR différente peut bien avoir des modifications différents à son inlinage (y compris les CLRS 64 bits VS 32 bits), donc je suis réticent à dire quelque chose de trop défini.

Autres conseils

Voici quelques informations sur les circonstances sous lesquelles le JIT ne fonctionnera pas d'inlinage;

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top