2

次の2つのシナリオが、ネイティブC ++コードに同じパフォーマンスの影響を与えるかどうか(パフォーマンスに影響がある場合)は疑問でした。

cpp_calc()いくつかの計算を実行し、ネイティブC++で記述された関数があると仮定します。また、cs_show_gui_stuff()C#で記述されたがあります。

さて、次のシナリオのどれがネイティブのc ++パフォーマンスを悪化させますか(パフォーマンスのペナルティがある場合)?

  1. C++を使用してネイティブC++dllを実行cs_show_gui_stuff()および呼び出す.Net(C#)アプリケーションを作成するか、C++をCOMDLLに変換します。cpp_calc()DllImport

  2. cpp_calc()C ++で実装しcs_show_guid_stuff()、C#コードを.NetCOMDLLに配置して実行するC++アプリケーションを作成します。

ありがとう :-)

4

2 に答える 2

9

これは、システムの他の部分が主に書き込まれる内容によって異なります。パフォーマンスのみの観点から、メソッド引数に特別なマーシャリングが必要ない場合は、PInvoke(属性を介した)1回の呼び出しの方がCOM呼び出しよりも高速になる可能性があります。DllImport

3番目の、おそらく最良の代替策は、パフォーマンスにほとんど影響を与えずにアンマネージC++メソッドを呼び出すマネージC++ / CLIライブラリを作成し、C#アプリケーションでC ++/CLIライブラリへの参照を追加することです。次に、C#アプリケーションはC ++ / CLIアプリケーションに対してマネージドメソッド呼び出しを行うことができ、C ++/CLIアプリケーションはアンマネージドメソッド呼び出しを行うことができます。これにより、1レベルの間接参照が追加されますが、前述の方法よりもはるかに優れたパフォーマンスが提供されます。

于 2011-05-27T07:59:54.953 に答える
1

いずれにせよ、あなたはジャストインタイムコンパイラにぶつかるでしょう。ペナルティは両方のシナリオで同じだと思います。.NETライブラリはGUIでより堅牢であるため、私は個人的に最初のものを選択します-WPF、Silverlight、WinForms、WebForms、Razor...あなたは私が何を意味するかわかります。

于 2011-05-27T07:58:40.273 に答える