質問
C#の私のDirectX 3Dエンジンの数学ライブラリに取り組んでいます。私はSlimdxを使っています、それは一緒になって強力なライブラリです。SLIMDXはかなりの数学のクラスを提供しますが、実際にはネイティブのD3DXオブジェクトの周囲にラッパーを取ります。
私の特定の質問は浮動小数点比較を行う必要があります。標準的な方法は、ε値を定義し、その値を浮動小数点値の差に比較して、そのような
を比較することです。float Epsilon = 1.0e-6f;
bool FloatEq(float a, float b)
{
return Math.Abs(a - b) < Epsilon
}
.
関数呼び出しオーバーヘッドは実際の比較を衰退させるので、この些細な機能はC ++でインライン化され、C#コンパイラはこれを行いますか?メソッドをインライン化させたいと思うC#コンパイラに言う方法はありますか?
解決
C#コンパイラはインライン化を実行しません - しかしJITはこの場合、そうする可能性があります。それは確かにががインライン化しています。
編集:この場合、をインラインに期待していますが、JITの最適化がオンになっているCordBGのようなコードをロードせずに言うのは難しいです。それぞれの異なるCLRバージョンは、そのインライン化(64ビット対32ビットCLRを含む)に異なる調整をもたらす可能性があるので、あまりにも明確なものを言うことに消極的です。
他のヒント
JITがインライン化しない状況についてのいくつかの情報です。
http://blogs.msn.com/b/davidnotario/archive / 2004/01/01/250398.aspx
所属していません StackOverflow