特定の物理エンジンにコメントすることはできませんが、高性能コード(管理されていないものと管理されたものの両方)を作成する際にいくつかの経験を提供することができます。
数年前、私はデルファイで書かれたシミュレーションソフトウェアを開発し、.NETに移植しました(到着前に)。これは純粋な管理コードであり、質量分析計シミュレーションのための計算されたイオン軌道であった。コードには数値積分、微分、N体静電荷計算が含まれていたので、確かにCPUをテストしていました。
シミュレーションルーチンのいくつかのC++バージョンがうまく最適化されたC#コードで打ち負かされる可能性がある最高のパフォーマンスを見出そうと、さまざまな実験を行った。よく私は、新しい演算子(オブジェクトの再利用)、キャッシング、オブジェクトプーリング、可能、移動方法はstatic
/sealed
可能な場合に呼び出し可能な場合、最小化方法は、呼び出し構造体の使用の減少を意味最適化することにより
、数を最小限に抑えますメソッドに渡されるパラメータのうち、デバッガから切り離されたリリースでコンパイルされるものx64私がこれをやった後、実際にC++を使ってCLRを打つために、私はSSE/SSE2やインラインアセンブラのような低レベルの手法に頼らざるを得ませんでした。
確かに、経験豊富なC++コードではC#とマネージ言語が一致しませんが、どちらのプラットフォームでも最適化されていないコードがあります。 C#コードが遅いが、開発者がnew
演算子を使用しているときは、GCが非常に頻繁に実行されると驚くほど奇妙なことがわかります。 C++のnew
とdelete
もパフォーマンスの低下を招くので、C++のコンパイルでは処理が速くなるとは思っていません。
特定のエンジンに戻る - もちろん、テストとパフォーマンスの分析を自分で行う必要があります。プラットフォームの呼び出しに関しては、ポインタと構造体がマネージド/アンマネージド境界を超えてマーシャリングされるときに、サンクと呼ばれるパフォーマンスが低下します。純粋なマネージドコードはこれを持っていないだけでなく、低レベルのメモリコピー、SSE/SSE2拡張などの最適化が欠落します。これはC++でコード化することができます。
最後に、非常に強力で高速なmanaged-> Platform invokeライブラリの例では、SlimDXを見てください。さて、ネイティブコードとDirectX(一部の情報源は〜5%と言われています)よりもパフォーマンスが上がりますが、C#で開発することによる生産性の利点については、その価値はあると思います!それは単にあなたが何の一般的な答えは存在しないために...それぞれのエンジンを使用して正確に何に依存しているため、比較のその種が難しいです
敬具、..あなたのために見つけるための唯一の方法は、コードにあります両方のエンジンで実行されているユースケース... – Yahia
実際に実行しているP/Invoke呼び出しの量と、各呼び出しが行っている作業量によって異なります。 –