4

Visual Studio2005で「Webサイト」としてコンパイルされ、Web展開プロジェクトを使用してプリコンパイル/パッケージ化されたASP.NET 2.0アプリケーション(MSIからIIS 6.0にインストールされたもの)があります。開発者は、次のバージョンのWebアプリケーションへの変更を検討する必要がありますが、このバージョンでは変更されません)。

アプリケーションがリサイクルされるときはいつでも(たとえば、web.configに変更が加えられると)、最初のヒットで、ASP.NETはアプリケーションをJITします。この一環として、ログインページに必要なすべてのアセンブリを取得し、それらをTemporary ASP.NET Files'assembly \ dl3'ディレクトリのネイティブコードにコンパイルします。これには20〜60秒かかります。これは、まれにしか発生しないリサイクルでのみ発生しますが、発生すると、ページの読み込みにかかる時間が大幅に長くなり、これを最適化できる可能性があると思います。

考慮する必要のあるDLLは122あるようです。そのうちのいくつかはプリコンパイルされたコードビハインドであり、その他はWebサイトのサードパーティコンポーネントです(たとえば、NHibernate.dll、レポートコンポーネントなど)。

なぜすべてを再コンパイル/再JITするのですか?ほとんどのアセンブリが変更されていないことを検出せず、変更を試みないのはなぜですか?問題の原因がバッチコンパイルではないことを証明できますか?(<compilation debug="false"> web.configで設定しました。)

他の質問は、NGENが役立つかもしれないことを示唆していますが、ASP.NET1.xでは使用できないと読みました。2.0を使用していますが、どちらの方法でも明確な答えを見つけることができません。

4

5 に答える 5

2

IISを実行していますか?IISでサイトを再起動すると、dllをコピーせずに構成への変更が反映されると確信しています。

于 2009-03-19T18:40:20.543 に答える
2

私の個人的な経験から、多くのエンティティがある場合、リサイクルが遅いのは NHibernate/ActiveRecord が原因であることがよくあります。説明と可能な解決策については、 http://nhibernate.info/blog/2009/03/13/an-improvement-on-sessionfactory-initialization.htmlを参照してください。

于 2009-04-11T17:32:52.463 に答える
2

頻繁に変更されない一般的な DLL (NHibernate やレポート ツールなど) を GAC にインストールすることで、リサイクル時間を改善できる場合があります。これにより、それらがリジットされるのを防ぐことができます。

方法: アセンブリをグローバル アセンブリ キャッシュにインストールする

于 2009-04-09T19:11:12.540 に答える
0

dll をコピーするだけで 20 秒かかるのは奇妙です。別のチェックを行い、ボトルネックがどこにあるかを確認することをお勧めします。

于 2009-03-19T23:12:14.943 に答える