COM登録済み.NET tlb経由で.NETコードを起動するVB6アプリケーションがあります。VB6 COM Interopで実行中のUIパフォーマンス問題
VB6プロセスで起動すると起動するすべての.NET UI(WinFormsとWPFがあります)は、非常にと非常に遅く表示されます。 .NETテストクライアント(単純なWPFアプリケーション)から実行すると、すぐに新しいウィンドウが表示されます。
ここにデータアクセスはありません。新しいウィンドウ/フォームが表示されるまでに要する時間は、コントロールの数に比例しているようです。たとえば、空白のウィンドウ/フォームが瞬時に表示されますが、5つまたは10つのコントロールを持つコントロールは5秒かかる場合があります。私たちの.NETフォーム/ウィンドウの中には、VB6プロセスで動作しているときに初めて表示されるまでに最大10秒かかるものがありますが、これは受け入れられません。
遅延はそれぞれの異なるフォームまたはウィンドウに対してが個別にと表示されるため、これは「アプリケーション全体のウォームアップ」問題ではありません。つまり、Form1とForm2が.NETにある場合、Form1が最初に表示される時間は10秒です。 Form2が初めて表示されたときにも10秒かかります。しかし、その後のVB6プロセスの生存期間内の同じフォーム/ウィンドウの起動は常に瞬間的です。さらに、コールドスタートとコールドスタートは異なるように見えますが、フォーム/ウィンドウごとに異なります。 Form1をウォーミングアップしないと、同じ.NET dllでForm2を表示するとパフォーマンスが低下します。
VS6のデバッガをVB6プロセスに接続し、ShowDialog(自分のコードではありません)の下でほぼ10秒間が.NET内部で費やされていることがわかりました。
問題は、WPFとWinForms UIの両方に同じように表示されるようです。
この問題をさらに解決する方法についてのご意見はありますか?
何らかの理由でメッセージの送信が遅いです。 Spy ++を使用して、.NETウィンドウがビジーな描画中にVB6ウィンドウで処理されているメッセージの数を確認します。 –