1

一部の WinForms アプリケーションのコールド スタートアップ時間を最適化しようとしています。すべてのアセンブリを NGen しましたが、JIT が呼び出されていることがわかります。MDA の jitCompilationStart を有効にしましたが、何かが JIT の呼び出しを引き起こしていることを示す MDA からの実行時例外が表示されます。

私の質問は - 今何ですか?私が見ているのは、推奨されるデバッガーのリストです。リストから sthm を選択すると、VS に何も表示されません。アプリは引き続き実行され、それだけです。アプリのどの部分が JIT を呼び出すかについての情報を取得するにはどうすればよいですか?

ここに画像の説明を入力

Debug->Exceptions-> Managed Debugging Assistants で JitCompilationStart を有効にしました。

ここに画像の説明を入力

4

1 に答える 1

2

その MDA は、ジッターが始まったときにデバッガーを接続するためのものでした。要件は、C++ コードとジッターのソース コードをデバッグできる登録済みのアンマネージデバッガーです。最初の要件は既に​​満たされています。VS20120 と VS2012 には優れたアンマネージド デバッガーがあります。後者は、あなたや私のような単なる人間にとってはかなり難しいものです. シナリオ全体は、Microsoft SDET にとってのみ興味深いものです。

コールド スタートの遅延を診断するには、明らかに間違った道を進んでいます。複数の点で、ジッターはウォームスタートの詳細です。コールド スタートは、ディスクがアセンブリ ファイルを見つけるために必要な時間によって支配されます。実際、Ngen を使用することは、まさにやりたくないことです。検索する必要があるファイルの数が 2 倍になります。ウォーム スタート時間を改善することは良いことです。

コールド スタートの遅延に対する適切な解決策は 3 つだけです。少ないアセンブリを使用してください。ILMerge が役に立ちます。より高速なディスクを使用してください。SSD は大いに役立ちます。そしてごまかして、ログイン時に何もしない小さな .NET プログラムを起動して、アセンブリをファイル システム キャッシュにロードします。これは実際には、ユーザーが .NET アプリをしばらく起動すると自動的に実行され、Windows プリフェッチャーが DLL を学習してプリロードします。しばらくすると顧客が文句を言うのをやめる以外は、気づきにくい。

于 2013-05-16T10:16:38.433 に答える