単純なウィンドウを備えた最も基本的なアプリケーションでさえ、起動に数秒かかりますが、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 つの考えられる問題: アプリがコールド状態から起動するのが少し遅い場合は、起動時に必要最低限しか読み込まないようにしてください。