12

おはようございます、

この場合、パフォーマンスが重要なスペルチェッカーを書いています。ということで、DBに接続してC#でGUIを作ろうと思っているので、編集距離計算ルーチンをCで書いてDLLにコンパイルし、C#で使ってDllImportいます。問題は、(間違っている可能性もありますが) 単語を 1 つずつマーシャリングすることで、多くのオーバーヘッドが発生していると私が考えていることです。そこで、.NETで型を直接操作できるように C++/CLI を使用することを考えました...私の質問は、C++/CLI のパフォーマンスは、重い数学的計算と配列アクセスのネイティブ C コードとどのように比較されるかということです。Stringchar *String

どうもありがとうございました。

4

3 に答える 3

4

C ++ / CLIは、ある種のマーシャリングも実行する必要があります。

すべてのパフォーマンス関連の問題と同様に、測定して最適化する必要があります。C#があなたの目的に十分な速さではないことを確認しますか?JITコンパイラが実行する最適化を過小評価しないでください。試行せずに管理するためだけに言語実装のオーバーヘッドを推測しないでください。それだけでは不十分な場合は、アンマネージコードを試す前に、安全でないC#コード(ポインター付き)を検討しましたか?

C ++ / CLIのパフォーマンスプロファイルに関しては、実際には使用方法によって異なります。()を使用してマネージコード(CIL)にコンパイルする場合/clr:pure、C#と大きな違いはありません。C ++ /CLIのネイティブC++関数は、プレーンC++と同様のパフォーマンス特性を備えています。ネイティブC++環境とCLI環境の間でオブジェクトを渡すには、ある程度のオーバーヘッドがあります。

于 2010-12-06T10:50:39.367 に答える
1

何を最適化する必要があるかを知っていると思い込まないでください。サンプリングしてみましょう。

私はいくつかのスペル修正プログラムを作成しました。私が行った方法 (ここで概説) は、辞書をメモリ内のトライとして整理し、それを検索することでした。単語数が多い場合は、共通の接尾辞を共有することで、トライのサイズを大幅に削減できます。

于 2010-12-06T13:20:04.587 に答える
1

ボトルネックが DLLImport にあるとは思いません。
DLLImport を毎秒数百回呼び出すプログラムを作成しましたが、問題なく動作します。
少額の罰金を支払うことになりますが、罰金は少額です。

于 2010-12-06T11:04:04.037 に答える