私はC++dllを呼び出すC#アプリケーションを書いています。このdllは、イメージングシステムのデバイスドライバーです。画像が取得されているとき、画像のプレビューは行ごとにライブラリから利用できます。C ++ dllは、プレビューを埋めるためにコールバックを受け取ります。そのコールバックは、基本的に、最終的な画像のサイズ、現在スキャンされている行、およびデータの行自体で構成されます。
問題は、スキャンが停止してC#コールバックが情報の取得を停止してからかなり深刻な遅延が発生することです。プログラムの流れは次のようになります。
- C#内からC++dllにコールバックを割り当てます
- ユーザーがデータの取得を開始します
- デバイスが起動します
- dllは数秒後にコールバックの呼び出しを開始します(通常)
- デバイスが画像形成を終了します
- dllは、イメージ形成の2倍の時間でコールバックを呼び出しています。
この同じdllはC++アプリケーションで問題なく動作しました。その最後のステップの遅延はないようです。ただし、C#では、コールバックをすぐに返すようにすると、遅延が発生します。コールバック内で何をしても、そこにあります。
この遅延は、アンマネージコードからマネージコードを呼び出すことの固有の制限ですか、それともこれを高速化するためにどちらかの側ができることはありますか?私はC++ライブラリライターと連絡を取っているので、C++側から修正を実装することが可能です。
編集:名前付きパイプのような単純なことを行うことはできますか?アプリケーションは独自のパイプから読み取ることができますか?