2011-10-31 47 views
1

我有這個管理網站使用(流利)NHibernate的數據訪問。如前所述elsewhere由於創建Configuration對象,SessionFactory的初始化很慢。建議的解決方案是將Configuration對象序列化到磁盤,然後重新使用它直到實體程序集或流體初始化程序集更改。我可以告訴WAS在回收後啓動新的AppPool嗎?

理論上這些聲音非常優雅和吸引人。在實際中,即使使用1實體模型,反序列化配置也需要大約500ms,並且創建SessionFactory 500ms。 (這與沒有序列化的啓動時間相當,但我懷疑一旦我把更多的實體放在那裏,增益就會明顯)。

IIS回收我的應用程序池後,它不會再啓動它,直到新的請求出現了。因此,通過IIS的默認回收管理(每29小時)以及管理員每天一次登錄到我的管理站點的可能情況,幾乎每次管理員登錄時都會發生這種延遲,給人一個緩慢的起始站點。

所以,我想知道是否有任何方法可以告訴IIS/WAS實際啓動替代應用程序池作爲回收的一部分,而不是等待直到下一個請求進入?我意識到這違背了WAS試圖在任何給定時間保持儘可能少的併發應用程序池的想法,但它會解決我的問題(因爲我認爲只要應用程序池啓動,就會創建ServiceHostFactory + ServiceHost) 。

+0

嗯..在一整天的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,然後用notepad ++打開applicationHost.config是一個非常糟糕的主意,因爲它允許我保存而不實際保存文件,這使我相信很長一段時間都沒有工作。 :) – Mithon

相關問題