4

IIS 構成で、アプリケーション プールに startMode="AlwaysRunning" 属性を設定し、アプリケーションに serviceAutoStartEnabled="true" 属性を設定しました。serviceAutoStartProvider をセットアップしたところ、「ウォームアップ」コードが実行されていることがわかりました。また、iisreset 後に w3wp プロセスが自動的に開始されることも確認できます。それでも、ASP.NET MVC アプリケーションへの最初の要求は、自動開始がない場合とまったく同じくらい遅くなります。私が見逃している点や、プロファイラーなしでこれを簡単にデバッグする方法はありますか?

この機能は、最初のリクエストのパフォーマンスにまったく影響を与えると予想されますか? ワーカー プロセスの準備ができていて、.NET アプリケーション ドメインとすべての .NET アセンブリが読み込まれていると仮定すると、最初の要求で実際に行う作業の大部分は何でしょうか?

4

1 に答える 1

2

私は最近これを調べています。

私の知る限り、autoStart 機能により、最初の要求の前に IIS ワーカー スレッド (既定ではプール用のスレッドのみ) が JIT コンパイルされます。

ただし、コンパイルされるのは、アセンブリと依存関係の大部分にすぎないように見えますが、必ずしもメソッドではありません。

その最初のリクエストが発生し、作成したメソッドが初めて呼び出されると、JITer はまだコンパイルされていないメソッドに対して最終コンパイルを実行します。

autoStart の利点は、.Net が前もって作業の 90% を実行できることですが、最後の 10% は、最初の要求が発生し、まだアクセスされていなかったメソッドが初めて実行されるときに支払われます。 .

于 2012-01-01T11:20:48.997 に答える