2011-06-02 23 views
1

背景... 我必須建立一個新的(asp.net mvc)應用程序,該應用程序使用現有的類庫,該類庫是複雜的,在此階段無法重寫。主要問題是這個類庫有一個巨大的初始化命中 - 它需要長達10分鐘才能將所有數據加載到內存中。這對於IIS啓動後執行速度很快的生產環境來說很好。但是,對於開發而言,這是一場噩夢,因爲每次構建解決方案並在瀏覽器中啓動解決方案時,都需要很長時間。可以使用Castle Windsor在內存中保留靜態引用嗎?

可能的解決方案? 因此,這個想法是Castle Windsor或IOC生活方式可以用來保存這個內存,這樣只有回收應用程序池才能強制重新加載。我記得在Windsor將代碼保存在內存中之前有一個問題,所以即使在更改它並重新編譯之後,IIS仍然運行舊代碼 - 在這種情況下這是一個問題,但在我的新場景中,這正是我想要的。

任何人都知道如何做到這一點?我嘗試過使用Singleton生活方式的虛擬項目,但在更改mvc項目後,它仍然重新加載類庫。

+2

我不認爲溫莎會解決這個問題。重新編譯(修改bin)將導致AppDomain無論如何重新加載。 – vcsjones 2011-06-02 14:18:26

+1

「我記得在Windsor將內存保存在內存中之前有一個問題,所以即使在更改並重新編譯之後,IIS仍然會運行舊代碼」 - > Windsor無法做到這一點,您的問題就在其他地方。 – 2011-06-02 14:53:43

+1

即使在這個階段看起來不像它,使用你的10分鐘加載類庫最終的成本也要比重寫要多得多。 – 2011-06-03 12:13:40

回答

0

也許你可以序列化加載的庫的內容並將其保存在磁盤上的二進制形式。這可能會加速負載。這是一個瘋狂的想法,但再一次,擁有一個需要10分鐘才能加載的類庫也是瘋狂的。

1

如果數據沒有序列化,那麼您可以存儲在緩存中,以便在重新編譯時保持其狀態。例如,memcached作爲一個獨立的進程運行。您可以更改bin或重新啓動dev服務器進程,並且緩存將保持其狀態。有一個訪問codeplex訪問memcacheD的提供者。

相關問題