ASP.Net でのプリコンパイル時間と起動時間
-
09-06-2019 - |
質問
私は ASP.Net 2.0 で (比較的小規模な) Web サイトを開発しています。また、実行可能ファイルを配布する前に、nAnt を使用してプロジェクトに簡単な調整を行っています。現在の状態では、Web サイトは以下を使用して「プリコンパイル」されています。
aspnet_compiler.exe -nologo -v ${Appname} -u ${target}
IIS プールが再起動された後 (アイドル シャットダウンまたはリサイクル後)、アプリケーションがオンラインに戻る (そして Application_start に到達する) までに最大 20 秒かかることに気付きました。
Visual Studio 内で直接デバッグしている場合は同じ問題が発生しないため (開始に 2 秒かかります)、aspnet_compiler が本当に良いアイデアなのかどうか疑問に思っています。
MSDN ではあまり見つかりませんでした。制作用に Web サイトをどのようにコンパイルしますか?
解決
次のことを確認してください。
- Web サイト プロジェクトではなく Web アプリケーション プロジェクトを使用しているため、コードビハインドのプリコンパイルされたバイナリが生成されます。
- web.config ファイルでデバッグ コードの生成をオフにしました。これが aspnet_compiler を使用したときと異なる場合は、コードが再コンパイルされる可能性があると思います。
これらを試したことがある場合は、アセンブリに対して ngen を実行して、JIT 時間を節約してみてはいかがでしょうか?
他のヒント
究極の応答性を実現するには、アプリをシャットダウンしないでください。
1 つ目の方法は、常に誰かが使用できるように、非常に人気があることを確認することです。
あるいは、スケジュールされたアクティビティとして他の場所から小さなキープアライブ ページを取得して、サイトを「ホット」に保つために使用することもできます。
Web サイトが更新可能としてコンパイルされている場合は、仮想ディレクトリに多数の .ASPX ファイルが表示されます。これらは起動時にコンパイルする必要があります。これにより、Web UI 自体を変更できるようになります。これは、Web サイトと Web アプリケーションの両方のデフォルトです。
これが web.config で設定されていることを確認してください <compilation debug=false>
. 。私の場合、ユーザーに与える前にすべてのメインページに対して Get リクエストを発行するバッチ ファイルもあります (ページ読み込みシミュレーション)。
重要なのは、IIS アプリケーション プールが決してシャットダウンしないようにすることです。ここはコードが実際にホストされる場所です。[アイドル タイムアウト] ([詳細設定] の下) を 1440 分 (24 時間) などの非常に高い値に設定して、誰かが 1 日に 1 回サイトにアクセスする限りシャットダウンしないようにします。
新しいコードをデプロイするとき、またはトラフィックがない状態でこのアイドル タイムアウト期間を超えた場合には、JIT 時間が引き続き発生します。
@サイモン:
- プロジェクトは Web アプリケーションです。その場合、Web サイトの起動が遅くなります (コード構成が異なること以外に、この問題が発生するとは思いませんでした)。
- 確認したところ、aspnet_compiler が呼び出された後に web.config を編集している間、デバッグ値には触れていません (ただし、web.config に手を触れないと Web サイトの起動が速くないかどうかは確認します。もちろん)
(そして、私は ngen を必ず見てみるつもりです。私はそのツールを知りませんでした。)