.Net C# アプリケーションからネイティブ COM サーバーを使用しています
COM サーバーから .Net アプリケーションへのコールバックが徐々に遅くなることを除いて、すべて正常に動作します。サーバーと .Net アプリケーションは、常に同じマシンで実行されています。
.Net から COM サーバーへの呼び出しは常に高速です。
奇妙なことに、同じバイナリを実行している場合でも、すべてのコンピューターで発生するわけではありません。
私はこの問題に多くの時間を費やしてきました。特別なことを見つけることなく、コールバックが速い環境と遅い環境を比較しました。
- コールバックは高速で開始されますが、時間の経過とともに指数関数的に遅くなります。
- コールバックが .Net メソッドに割り当てられているかどうかは関係ありません。(すべてのコールバックをオフにするサーバースイッチがあります。これが、問題がコールバックにあることを知っている方法です)
- 低速のコンピューターは Window 7 64 ビットを使用しますが、他のコンピューターでは同じ構成が高速です。
- 同じドメインとネットワーク上に低速のコンピューターと高速のコンピューターがあります
- ユーザーがローカル管理者か標準ユーザーかは関係ありません
- ディスク/ネットワーク アクティビティを監視しましたが、低速と高速の違いはありません
- メモリ消費量に顕著な違いはありません
- WinDbg から CLR メモリを調べましたが、奇妙なことは何も見つかりませんでした
私が指摘したいくつかのこと:
- コールバックが遅い場合、サーバー プロセスは 100% の CPU を使用します。
- プロセスエクスプローラーでコールスタックを調べたところ、サーバーはほとんどの場合、RPC Ndr* 関数の 1 つ、つまりNdrClientCall2にあります。
私は今、アイデアが不足しており、これを解決するためにいくつかの助けが必要です.