11

起動時に多くの IoC が発生するため、Application_Start が非常に遅くなります。

私が解決しようとしている問題は、その起動時間をエンドユーザーに渡さないようにするにはどうすればよいですか?

仮定

私のアプリは AppHarbor でホストされているため、IIS にアクセスできません。ただし、たとえそうしたとしても、アプリ プールをリサイクルさせることがベスト プラクティスであるため、Application_Start を定期的に実行することを避ける方法はありません (AppHarbor では 20 分ごとだと思います)。

それを解決する私の考え

最初は毎分か何かを打つと思っていましたが、それは強引すぎるようで、ユーザーが遅い起動を経験するのを止めることさえできないかもしれません.

私の現在の解決策は、 Application_End イベントを処理し、すぐにアプリをヒットして再起動することです。これにより、ユーザーに影響を与えないことを願っています。

この問題を解決するより良い方法はありますか?

4

2 に答える 2

5

残念ながら、セッション タイムアウトを長くしても、InProcess セッション状態を使用している場合、IIS アプリ プールのリサイクルは妨げられません。

依存関係 (の一部) の遅延読み込みを検討しましたか? SimpleInjector には、これを行う方法に関するドキュメントがあり、他のほとんどの IoC に適応できるはずです。

シンプル インジェクター \ ドキュメント \ ハウツー \ ファクトリ デリゲートの登録 \ レイジー ファクトリの操作

于 2012-07-27T17:14:54.497 に答える
3

私の理解では、起動時間がユーザーに伝播するのを防ぐために、 IIS アプリ プールのタイムアウト設定を使用できるアプリ プールのリサイクルを避ける必要があります。これらは、IIS コンソールだけでなく、web.config を介して調整できます。さらに、この SO question で詳細を読むことができます。これを達成するために Application_End ハックは必要ないかもしれません。

更新:これについて役立つ可能性のある別の興味深いことが見つかりました。ワーカープロセスが開始するとすぐに依存関係をプリロードするために使用できるこのIIS アプリケーション初期化拡張機能を確認してください。顧客体験の向上に役立つ場合があります。見てみな。

于 2012-07-25T07:55:19.380 に答える