なぜASP.NETの再コンパイル(再JIT)すべての時に一つだけの変更をしますか?

StackOverflow https://stackoverflow.com/questions/663466

  •  20-08-2019
  •  | 
  •  

質問

私は私が入れている(2005年のVisual Studioで、「ウェブサイト」としてコンパイルし、プリコンパイル/ Webデプロイメントプロジェクトを使用してパッケージ化された(MSIからIIS 6.0にインストールされている)ASP.NET 2.0アプリケーションを持っています)開発者への要求は、次のバージョンのためのWebアプリケーションに変更することを検討するために、それは、このバージョンでは変更されません。

アプリケーションが最初のヒットに、(例えば、変化がweb.configファイルに対して行われる)再循環されるたびに、ASP.NET用のJITアプリケーション。その一環として、それは、ログインページに必要なすべてのアセンブリをとり、20〜60秒かかりASP.NETの一時ファイルの「アセンブリの\ DL3」ディレクトリ内のネイティブコードにコンパイルします。これはまれにしか起きリサイクル、上で起こる - 。しかし、それがないとき、それはロードするために非常に長い時間がかかるためにページを引き起こし、私はこれを最適化することが可能であると考えています。

プリコンパイルされたコードビハインドているそのうちのいくつかは、それは検討する必要があると122個のDLL、があるように見えるが、他の人がウェブサイトのためのサードパーティのコンポーネントです(コンポーネントを報告する例えば、NHibernate.dll、など。)

なぜそれが再コンパイルん/再JIT のすべてのの?なぜそれがアセンブリのほとんどが変更されていないことを検出していないし、それらを変更しようとしないのですか?私はそれが問題を引き起こしているバッチコンパイルではないことを証明することはできますか? (私は> web.configファイルで設定<compilation debug="false"ています。)

NGENが役に立つかもしれない提案が、私はそれが不可能な読みの

その他の質問ASP.NET 1.xの上でそれを使用します。我々は2.0を使用していると私はきれいな答えにいずれかの方法を見つけることができません。

他のヒント

は、IISを実行していますか?私はあなたがIISでサイトを再起動した場合、それはDLLをコピーせずにコンフィグに変更をピックアップすることをかなり確信しています。

GACに - などのNHibernateやレポート作成ツールとして -

あなたはあまり変化しない一般的なDLLをインストールしてリサイクルタイムを向上させることができます。それは再JITコンパイルされてからそれらを防ぐ必要があります。

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

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

どのようにしてAppDomainのすべてがリセット/リサイクルせずに適切な状態であること(または起こるものは何でも)特定することができますか?あなたが設定値に基づいて、静的フィールドの値を設定し、アプリケーションの起動(Global.asaxの)中に何かを持っているイメージング。あなたは全体のAppDomainをリセットしない限り、あなたは確認することはできません。

もう一つの理由:。そこにそのロードされた後、.NETのDLLをアンロードする方法はありませんので、あなたが何かが更新されたときにアプリケーションドメインを再作成する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top