2009-06-11 10 views
2

this questionを聞いた後、これについて考えてみましょう - C#アプリケーションからC++ dllにバッファを渡してから、Cでタイミングイベントを実行するだけです#コンテンツをコピーするバッファアウトの?こうすることで、明らかにコールバックコールが原因で発生する遅延を回避できます。その作業、またはマーシャリングはそのような種類のバッファアクセスを阻止しますか?それとも、安全でないモードにしなければならないでしょうか?そうしないと、それを動作させる魔法の言葉は何でしょうか?そのほかの質問からおさらいしC++/C#コールバック継続

  • 私はC++やC#で書かれたアプリで書かれたドライバを持っています。
  • ドライバからプレビュースタイルのデータを取得する必要があります。
  • C++アプリケーションはC++ dllと対話します。 C#アプリにはデータをコピーするための大きな遅延があります。
  • C#側のリリース/デバッグの違いによって遅延が発生していないようです。
  • 遅延を回避する必要があります。この提案されたバッファー方式は機能しますか? C#のアプリケーションは、C++のDLLに書き込まれたバッファから消費することができますか?それとも別の処理が必要ですか?
+0

このディスカッションを元のスレッドで続行することを検討してください。 –

+0

誰もオリジナルスレッドを見ていない:)(または、申し訳ありませんが、35人が行った)。 – mmr

答えて

0

私が他のスレッドで言ったように、遅延は完全にC++側にあったと思われますので、私の最後に詰まった金額は問題を修正するつもりはありませんでした。

0

はい、C#からバッファにバッファ(例:byte [])を渡すことができます。私はあなたの元の問題によって困惑しています。私は自分のC++コードからC#へのコールバックを使用していますが、パフォーマンス上の問題に気がついたことはありません。ループの繰り返しごとにコールバックを行わないようにしています。

2

あなたは

  1. したい場合は、バイトのポインタ(危険なコード)として、それを消費したり、マーシャリングコピーを(取るしない限り、マネージコード
    でアンマネージコードからのデータは、その後、あなたが問題を持っている消費あなたのために行います)。後者があなたを減速させる可能性があります(ただし、ベンチマーク)。

  2. は、アンマネージコードにマネージコードからのデータを消費
    その後、これはあなただけで、それがアンマネージコードで使用されている間、あなたは関連するバッファをピンを確認する必要があり非常に単純です。

あなたがしたいように聞こえる1.遅延をベンチマークしましたか?コピーしている場合(バッファがどれくらい大丈夫か)、バイトポインタ(および長さ)としてバッファとやりとりするようにC#コードを変更できますか?
C++/CLIにアクセスできない場合は、コードの一部を非管理(rawバッファを使用)し、管理対象の部分をそのサブセクションでしか使用しない方が簡単であるため、