2012-02-15 11 views
1

スタートアップ時に.NETコードを起動するVB6アプリケーションがあります。COM Interopコールドスタートを改善する

Windows XPマシンでは、コールドスタートに約22秒かかっています。ウォームスタートは同じマシンで約4秒です。

Windows Vista/7は、コールドスタートで約5秒、ウォームスタートで約3秒かかります。

上記に基づいて、私は遅延がディスクアクセスに関連し、Vista/7はSuperFetchの影響を受けていないと仮定しています。

明らかに、XPのコールドスタート性能を改善する必要があります。 Windows起動時にシステムトレイで実行される「ウォームアップ」アプリの作成を検討していますが、努力する前に他の提案があるかどうか確認したいと思っていました。

私はアセンブリを作成しようとしましたが、それは何の違いもないようです。

トレースコードを追加すると、VB6コードが.NET境界を通過するのに約1秒しかかかりませんが、.NETの初期化コードには約20秒かかります。それはいくつかの反射を行い、私は遅延がGACアセンブリをディスクからロードしていると推測しています...しかし、私は完全にはわかりません。

提案?

+0

[.NET JITコンパイル済みコードはキャッシュされていますか?どこですか?](http://stackoverflow.com/questions/3295622/is-the-net-jit-compiled-code-cached-where) –

+0

あなたは新しいマシンで実行しているものがないと確信していますか? )は、CLRを使用し、ブート時やログオン時に効果的に "プリロード"しますか?私は、ATIがビデオアダプタに関連するCatalystブランドのソフトウェアを購入して以来、このことを知っています。他のベンダーもこれをやっているかもしれません。 – Bob77

+0

スプラッシュ画面は何ですか:) – tcarvin

答えて

2

私は次のことをしようとするだろう:

  • クランクアウトあなたの.NETコードの.NETフロントエンド。同じ時間がかかるかどうか確認してください。そうでない場合(私はそれを疑う)、問題はInteropにあります。
  • クロスオーバーは2番目のコード内で行われるため、.NETコードをプロファイルします。 Ants Profilerの試用版をダウンロードし、問題がどこにあるかを確認してください。
  • 最後に、いくつかのProcMonアクションを投げて、アクセスされているファイルを確認します。

私はGACライブラリが長時間かかることはありません。私はコードがあなたが思っているより少し反映を行っていると推測しています。

+0

もちろん、私は確かに私が思ったより多くの反省をしていた。ありがとう。 – Jeff