1

.Net C# アプリケーションからネイティブ COM サーバーを使用しています

COM サーバーから .Net アプリケーションへのコールバックが徐々に遅くなることを除いて、すべて正常に動作します。サーバーと .Net アプリケーションは、常に同じマシンで実行されています。

.Net から COM サーバーへの呼び出しは常に高速です。

奇妙なことに、同じバイナリを実行している場合でも、すべてのコンピューターで発生するわけではありません。

私はこの問題に多くの時間を費やしてきました。特別なことを見つけることなく、コールバックが速い環境と遅い環境を比較しました。

  • コールバックは高速で開始されますが、時間の経過とともに指数関数的に遅くなります。
  • コールバックが .Net メソッドに割り当てられているかどうかは関係ありません。(すべてのコールバックをオフにするサーバースイッチがあります。これが、問題がコールバックにあることを知っている方法です)
  • 低速のコンピューターは Window 7 64 ビットを使用しますが、他のコンピューターでは同じ構成が高速です。
  • 同じドメインとネットワーク上に低速のコンピューターと高速のコンピューターがあります
  • ユーザーがローカル管理者か標準ユーザーかは関係ありません
  • ディスク/ネットワーク アクティビティを監視しましたが、低速と高速の違いはありません
  • メモリ消費量に顕著な違いはありません
  • WinDbg から CLR メモリを調べましたが、奇妙なことは何も見つかりませんでした

私が指摘したいくつかのこと:

  • コールバックが遅い場合、サーバー プロセスは 100% の CPU を使用します。
  • プロセスエクスプローラーでコールスタックを調べたところ、サーバーはほとんどの場合、RPC Ndr* 関数の 1 つ、つまりNdrClientCall2にあります。

私は今、アイデアが不足しており、これを解決するためにいくつかの助けが必要です.

4

0 に答える 0