8

C# で DirectX 3D エンジン用の数学ライブラリに取り組んでいます。私は、素晴らしくまとめられた強力なライブラリであるSlimDXを使用しています。SlimDX はかなりの数の数学クラスを提供しますが、それらは実際にはネイティブ D3DX オブジェクトのラッパーであるため、オブジェクト自体は非常に高速ですが、相互運用性はないと思います。なぜなら、私のマネージ C# コードがそれらより優れているからです。

私の特定の質問は、浮動小数点の比較に関係しています。一種の標準的な方法は、イプシロン値を定義し、その値を浮動小数点値の差と比較して、次のように近さを判断することです。

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

関数呼び出しのオーバーヘッドが実際の比較を圧倒するため、この単純な関数は C++ でインライン化されます。C# コンパイラはこれを行いますか? メソッドをインライン化する必要があることを C# コンパイラに伝える方法はありますか?

4

2 に答える 2

7

C# コンパイラはインライン化を実行しませんが、この場合、JIT はインライン化を実行する可能性があります。どちらかといえば、それは確かにインライン化を実行する部分です。

編集:この場合はインライン化されると思いますが、JIT 最適化がオンになっているコードを cordbg のようなものにロードしないとわかりませんCLR のバージョンが異なれば、そのインライン化 (64 ビットと 32 ビットの CLR を含む) の調整も異なる可能性があるため、明確すぎることは言いたくありません。

于 2010-07-13T11:14:02.503 に答える
1

JIT がインライン化を実行しない状況に関する情報を次に示します。

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

于 2010-07-13T11:22:57.143 に答える