4

単純なウィンドウを備えた最も基本的なアプリケーションでさえ、起動に数秒かかりますが、Win32 の同等のアプリケーションは一瞬で読み込まれます。

遅延は、JIT がオペコードをマシン コードに変換するのにかかる時間によるものではなく、Windows が .Net フレームワークをロードするのにかかる時間によるものであると読みました。

そこで、MS のtasklist.exe CLI アプリケーションを使用して、mscoree.dll が既に読み込まれているかどうかを確認しました。

C:\>tasklist /m mscoree.dll

Image Name                   PID Modules
========================= ====== =====================
explorer.exe                 368 mscoree.dll
BSQLServer.exe               652 mscoree.dll
TOTALCMD.EXE                 408 mscoree.dll
Uedit32.exe                  260 mscoree.dll
OUTLOOK.EXE                 1912 mscoree.dll

次に、基本的なアプリケーションを OK ボタンだけで実行しましたが、それでも表示されるまでに数秒かかりました。

mscoree.dll が、少なくとも基本的な Windows を処理するために .Net がロードされていることの証拠であると仮定すると、なぜ遅延が発生するのでしょうか? FWIW、それは XPSP3 ホスト上にあります。

.Net フレームワーク全体が各プロセスにロードされたとしても、それは他のプロセスで既に稼働しているため、他のプロセスからコードを RAM にコピーするだけだと思いますか?

ありがとうございました。


編集: 初期起動時間が遅くなったのは、JIT や .Net のロードではなく、ウイルス対策/ファイアウォール アプリケーションの使用が原因だったようです。もう 1 つの考えられる問題: アプリがコールド状態から起動するのが少し遅い場合は、起動時に必要最低限​​しか読み込まないようにしてください。

4

2 に答える 2

2

私はWindows 7に簡単なc#テストアプリを持っています。これはすぐに起動し、遅延はありません。これは、エクスプローラーで実行可能ファイルをダブルクリックしたときです。VisualStudio内からは、VSがコンパイルが必要かどうかをチェックし、おそらくデバッグ用のインストルメンテーションなどを行うため、数秒かかります.

于 2012-07-06T08:11:59.057 に答える