C++ で記述された関数を C# アプリケーションで実行することを考えています。それがモバイルであろうと、通常のものであろうと。
C++ (数学処理) で記述されたコードを C# 環境 (アプリケーション) で実行すると、同じコード (理論的) が C# で記述されている場合、より高速に実行されますか?
ありがとうございました!
2 番目の質問: DLL から外部からアクセスせずに、C# アプリケーションに C++ コードを含めてアクセスするにはどうすればよいですか?
C++ で記述された関数を C# アプリケーションで実行することを考えています。それがモバイルであろうと、通常のものであろうと。
C++ (数学処理) で記述されたコードを C# 環境 (アプリケーション) で実行すると、同じコード (理論的) が C# で記述されている場合、より高速に実行されますか?
ありがとうございました!
2 番目の質問: DLL から外部からアクセスせずに、C# アプリケーションに C++ コードを含めてアクセスするにはどうすればよいですか?
C# に近づけることはできますが、通常は C++ バージョンの方が高速です (私の経験では)。C++最適化コンパイラはより良い仕事をします(コンパイル/最適化に時間がかかる可能性があります).C++では、SSEのようなものを使用して数学を高速化できますが、これはC#では非常に面倒です. SSE では、アセンブラーよりも 5 倍高速な大規模な整数乗算のコードを作成しましたが、同じ C++ コードよりも 10% しか高速ではありませんでした。5x は主に、単一の命令で 2x 32 ビット乗算を実行できる SSE によるものです。
C# では、ポインター操作を実行できるアンセーフ コードを使用できます。配列処理などを高速化します (通常、すべての配列アクセスを境界チェックするため、これは配列の集中的な数学処理に役立ちます)。また、C++ で記述されたアンマネージ DLL の使用にフォールバックすることもできます
したがって、コードが最後に何時間も実行されない限り、最適化はおそらく楽しいと思いますが、それほど価値はありません;-)
Microsoft から .NET 用の C++/CLI バリアントがありました/あり、C++ と C# を簡単に混在させることができます。http://www.functionx.com/cppcli/Lesson01.htmを参照してください。しかし、それがまだサポートされているかどうかはわかりません。
また、このスタック交換の質問は、VirtualMachine 言語のパフォーマンスがプリコンパイル済み言語と異なる理由について興味深いと思うかもしれません。JIT 化された言語がネイティブの C/C++ よりも遅く、メモリ効率が低いのはなぜですか?