Windows で C++/CLI を使用しています。/clr でビルドされた MFC アプリです。
アプリケーションの起動にかかる時間をテストしたいと考えています。最初は10秒かかりましたが、その後4秒、4秒、5秒かかりました。これは、Windows が DLL をキャッシュしていることが原因であると想定しています。
テスト条件が毎回同じになるように、ディレクトリをキャッシュから削除できるツールはありますか? テスト間で再起動する必要はありません:)
Windows で C++/CLI を使用しています。/clr でビルドされた MFC アプリです。
アプリケーションの起動にかかる時間をテストしたいと考えています。最初は10秒かかりましたが、その後4秒、4秒、5秒かかりました。これは、Windows が DLL をキャッシュしていることが原因であると想定しています。
テスト条件が毎回同じになるように、ディレクトリをキャッシュから削除できるツールはありますか? テスト間で再起動する必要はありません:)
.Net フレームワークを使用している場合、フレームワークの初期化 (mscoree.dll の読み込みなど) を 6 秒間待機している可能性があります。CLR Inside Out: Improving Application Startup Performanceは、MSDN マガジンのために書かれた記事です。
コールド スタートアップでは、すべての .Net Framework をロードし、JIT コンパイラを実行してコードを生成する必要があります。
ほとんどの場合、コールド スタートアップは I/O バウンドです。つまり、命令の処理に費やす時間よりも、データの待機に費やす時間が長くなります。アプリケーションの起動にかかる時間は、OS がディスクからコードをフェッチするのにかかる時間と、IL コードの JIT や、アプリケーションの起動パスで実行されるその他の初期化などの追加の処理を実行するのにかかる時間に等しいです。応用。通常、コールド スタートアップでは処理がボトルネックになることはないため、アプリケーションのスタートアップ パフォーマンス調査の最初の目標は、ロードされるコードの量を減らしてディスク アクセスを減らすことです。
アプリケーションを 2 回目に起動すると、ほぼすべての作業が完了します。つまり、DLL がロードされ、以前にコンパイルされたコードがプルされる可能性があります。
起動時間を短縮するためにできる最善の方法は、最初のウィンドウが表示される前に .Net フレームワークの呼び出しの量を減らし (実行する前にすべてをコンパイルする必要があるため)、ディスク I/O の量を減らすことです。プログラムを起動するために必要です。
プログラムが起動して実行されると、.Net からのコンパイルされていない IL は、最初に呼び出されたときに JIT コンパイラによってコンパイルされます。
また、私の知る限り、フレームワークがロードされると、再起動せずにアンロードする簡単な方法はありません (アンロードできる場合)。フレームワークをロードする直前に仮想マシンを保存された状態にすると、「再起動」に必要な時間を大幅に短縮できます。
ジョシュアが言ったことに加えて、この回答の3番目の段落を見てください。