Domanda

Sto lavorando su una biblioteca di matematica per il mio motore 3D DirectX in C #.Sto usando Slimdx, che è una meravigliosa messa insieme e una biblioteca potente.Slimdx offre alcune lezioni di matematica, ma sono in realtà involucri attorno agli oggetti D3DX nativi, quindi mentre gli oggetti stessi sono molto, molto veloci, l'interoperale non è presumo, perché il mio codice c # ha superatoli.

La mia domanda specifica ha a che fare con il confronto a punti mobile.Il modo in cui il modo canonico è quello di definire un valore di epsilon e confrontare il valore alla differenza tra i valori del punto flottante per determinare la vicinanza, come:

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

La funzione di chiamata della funzione potrebbe battere il confronto effettivo, quindi questa funzione banale sarebbe in linea in C ++, sarà il compilatore C #?C'è un modo per dire al compilatore C # che voglio un metodo inlineato?

È stato utile?

Soluzione

Il compilatore C # non esegue l'inlinea - ma il JIT potrebbe farlo in questo caso.Questo è certamente il pezzo che sarebbe eseguire di inlineando, se mai.

Modifica: vorrei Aspettatevi in linea in linea in questo caso, ma è difficile da dire senza caricare il codice in qualcosa come Cordbg con le ottimizzazioni JIT attivate.Ogni versione CLR diversa potrebbe avere modifiche diverse al suo diining (incluso il 64 bit VS 32 bit CLRS) quindi sono riluttante a dire qualcosa di troppo definito.

Altri suggerimenti

Ecco alcune informazioni sulle circostanze in cui il JIT non eseguirà di inlinea;

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top