ASP.NETアプリを常に“ alive”に保つ方法と、それが悪い考えである場合、なぜそうしないのですか?

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

  •  03-07-2019
  •  | 
  •  

質問

最近、ASP.NETアプリケーションを光沢のある新しいVPSにデプロイしました。VPSが共有ホスティングソリューションに与える一般的なパフォーマンスの向上には満足していますが、起動時間には不満があります。アプリケーション。

私のWebアプリケーションは、クライアントが最初にヒットしたときに起動するのにかなりの時間がかかります。私はそれをデバッグモードで実行していません(web.configで無効にします)、起動時に実行する実際の作業はありません-アプリケーション開始イベントハンドラにコードがありません、開始しません余分なスレッド、何もない。クライアントが私のアプリケーションに初めてアクセスしたとき、応答するのに15〜20秒かかります。アプリケーションがシャットダウンするまで数分待たなければ、その後の呼び出しには1〜2秒かかります。その後、15〜20秒の起動時間に戻ります。

(タイミングベンチマークが非常に非科学的であることは承知しています。これらの数値は、アプリの起動時のパフォーマンスを感じさせるだけです。)

ASP.NETの私の理解では、IIS(この場合は7.0)は、初めて実行されるWebアプリケーションをコンパイルし、Webアプリケーションが変更されるまでそれらのバイナリをキャッシュします。私の理解は間違っていますか?

それで、その本サイズの序文の後に、私の質問があります:

  • ASP.NETのコンパイルに関する私の理解は間違っていますか?実際にどのように機能しますか?
  • IISにバイナリをキャッシュさせるか、アプリケーションを無期限に保持する方法はありますか?
  • 前の質問のいずれかを行うのが悪い考えである場合、なぜそれが悪い考えであり、代わりに起動パフォーマンスを向上させるために何ができますか?

ありがとう!

編集:私の質問はこの質問(ここでこれに対する答えを探したほうがいいと思いました、ハハ)。しかし、私の質問はより包括的であり、これに対処するより良い、すでに尋ねられた質問がない限り、重複として閉じられなかったなら、私は感謝します。

役に立ちましたか?

解決

IISは、その構成に応じて、一定期間後にWebアプリをシャットダウンします。私はIIS7とこれを設定する場所にあまり詳しくないので、これを設定する方法について少し調査したいかもしれません(開始点)。

それは悪いですか?コードの品質に依存します。メモリまたはリソースをリークしていない場合は、おそらくそうではありません。

他の解決策は、ウェブサイトをプリコンパイルすることです。これはあなたにとってより良いオプションかもしれません。ただし、Webサイトの操作方法によっては、マイナス面が生じる可能性があるため、チェックアウトして確認する必要があります。

他のヒント

  

ASP.NETの私の理解では、IIS(この場合は7.0)は、初めて実行されるWebアプリケーションをコンパイルし、Webアプリケーションが変更されるまでそれらのバイナリをキャッシュします。私の理解は間違っていますか?

それは正しいです。具体的には、アセンブリはシャドウコピーとして構築されます(ボリュームスナップショットサービス/シャドウコピー機能と混同しないでください)。これにより、既存の実行中のセッションに影響を与えることなく、フォルダ内のコードをその場で置き換えることができます。 ASP.NETは変更を検出し、新しいバージョンをターゲットディレクトリ(通常は Temporary ASP.NET Files )にコンパイルします。そのプロセスの詳細: ASP.NETダイナミックコンパイルについて

純粋にコンパイル時間である場合、最も効率的なアプローチは、リサイクル後に自分でWebサイトにアクセスすることです。クライアントではなく15秒の遅延を受け取るのはあなた自身であることを確認するために、定期的に電話をかけます。

しかし、すべてのコンパイル時間が(ハードウェアに依存する)場合は驚かれます-クラスの静的インスタンスがたくさんありますか?彼らはスタートアップで多くの仕事をしていますか?

トレースまたはプロファイリングのどちらでも、おそらく起動時間が費やされた場所を非常にすばやく見つけることができます。

プロセスを維持することが悪い考えである理由に関して、私はそれが片付けられたと信じています。データをどのようによく見ても、GCがどれだけうまく動作していたとしても、プロセスを再起動することで適切な消去が実行されます。断片化などの問題はなくなり、時間の経過とともに蓄積する他のリソースの問題は解消されます。したがって、サーバープロセスを無期限に実行し続けることは非常に悪い考えです。

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