2012-02-21 11 views
2

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の両方に同じように表示されるようです。

この問題をさらに解決する方法についてのご意見はありますか?

+1

何らかの理由でメッセージの送信が遅いです。 Spy ++を使用して、.NETウィンドウがビジーな描画中にVB6ウィンドウで処理されているメッセージの数を確認します。 –

答えて

0

私はこれのほとんどがCLRスタートアップ遅延+ JITコンパイル遅延だと思うでしょう。ここでの違いは、必要に応じてJITコンパイラのインスタンスを開始している可能性があり、場合によっては追加のインプロセスCLRインスタンスを開始することも考えられます。

In-Process Side-by-Side

+0

.NETアセンブリでVB6アプリケーションを起動することは、.NET exeを起動することと変わりありません。どのくらい正確に彼は自分のVB6アプリケーションから追加のインプロセスCLRインスタンスを開始するだろうか? – AngryHacker

+0

リンクされた記事に記載されていますか?「ネイティブのCOMアクティベーションを使用してマネージコードをホストする場合、複数のランタイムで作業するために特別な作業を行う必要はありません。コンポーネントをアクティブにするだけで、ランタイムは図3のルールに従ってロードします。 – Bob77

0

それは他の活動が暗黙のうちに起こっていることは可能ですか?あなたは、このアプリケーションはWPFであり、自動データバインディングとそのすべてが蔓延していると述べました。私はこれらの手順を取るだろう:

  1. SQLプロファイラをオンにして、呼び出しが行われているかどうかを確認します。
  2. 私はそれをAntsプロファイラまたは組み込みのプロファイラで実行し、どこに問題があるかを確認します。
  3. ProcMonを起動し、アクセスされているファイルを確認します。
  4. アセンブリをngenできるかどうかを確認してください。問題は解消されますか?もしそうなら、それはJITコンパイラかもしれないが、私はそれが事実であるとは思わない。

私は本当に問題がInteropだとは思わない。

+0

DBアクセスはまったくありません(SQLプロファイラを実行しました)。 VSで組み込みのプロファイラを実行したところ、.NETフレームワーク内のさまざまなレンダリング呼び出しの中で常に時間がかかることがわかりました。私はProcMonを試してみます。私はアセンブリを作成しませんでしたが、GACを使用していないため(GACが署名されていないため)... GACを使用していない場合は、まだ検証が必要です。実際のディスクサイズはngen'ingから大きいです...右?とにかく、ngen'ingそれ自体は何の違いもありません。 – Jeff

関連する問題