2011-10-31 6 views
1

データアクセスに(Fluent)NHibernateを使用しているこの管理サイトを持っています。 elsewhereと述べたように、SessionFactoryの初期化はConfigurationオブジェクトの作成のために遅いです。推奨される解決策は、Configurationオブジェクトをディスクにシリアル化し、エンティティアセンブリまたは流暢な初期化アセンブリが変更されるまで再利用します。リサイクル後に新しいAppPoolを開始するようにWASに指示できますか?

理論的には非常にエレガントで魅力的です。実際には、1エンティティモデルであっても、コンフィグレーションをデシリアライズすると約500msかかり、SessionFactoryをもう500ms作成します。 (これはシリアル化されていないスタートアップ時間に匹敵しますが、私はそこに多くのエンティティを置くと明らかになるでしょう)。

IISは自分のアプリケーションプールをリサイクルした後、新しいリクエストが入ってきます。したがって、IISのデフォルトリサイクル管理(29時間ごと)、および管理者が管理サイトに1日に1回ログインするというシナリオでは、この管理者がログインするたびに1秒の遅延が発生し、遅い出発地。

IIS/WASに、次の要求が到着するまで待つのではなく、リサイクルの一部として実際に置換アプリケーションプールを開始するように指示する方法があるのだろうか?これは、WASがいつでも同時に実行するアプリケーションプールをほとんど保たないというアイデアに反していますが、私の問題は解決します(アプリケーションプールが起動するとすぐにServiceHostFactory + ServiceHostが作成されると仮定しています) 。

+0

Hmm .. 1日中に9回の再生回数。私の評判の欠如は私によく役立たないと思う。どのような代替ソリューションも大歓迎です。あなたはメモリのどこかにWindowsサービスやcomオブジェクトの設定をキャッシュすることを考えますか? – Mithon

答えて

0

IIS 7 autostart featureは役に立ちますか?また、System.Web.Hosting.IProcessHostPreloadClientインターフェイスを実装して、プールが稼働しているときにアプリケーションが起動していることを確認することもできます(例についてはthis blog postを参照)。

+0

この機能は、アプリケーションプールが起動していることを確認しますが、リクエストが来るまでサービスプロバイダのインスタンスを含む新しいアプリケーションドメインにアプリケーションをロードしません。この機能を開始するように設定する方法がない限りそのアプリケーションは私を助けません。 – Mithon

+0

答えを更新しました。 – UserControl

+0

ありがとうUserControl、それは美しく動作するようです。これは、Windows Server 2008 R2以降でのホスティングにのみ有効です。 私は道に沿っていくつかの波を打ったが、それらを解決することができた。たとえば、cmdをadminとして実行し、notepad ++でapplicationHost.configを開くと、実際にファイルを保存することなく保存することができ、何も長時間働いていなかったと信じることができたので、非常に悪い考えでした。 :) – Mithon

関連する問題