2016-08-31 42 views
1

在我的ASP.NET-MVC應用程序中,我使用靜態變量將信息存儲在靜態類中。但是,ASP.NET在回收所有數據和線程之後,我的「App_Start」過程將在清理後調用。在ASP/MVC中長期保存變量

我用HangFire解決了備份任務的問題。 但是爲了生成靜態類,我需要很長時間。回收後的第一個請求必須等待靜態類的設置。

爲什麼延遲?我使用的EntityFramework和正確的處理我需要從他們的關係數據庫中的所有記錄。 所以我用靜態類保存所有記錄並使用數據庫作爲第二策略。

我不知道我能做些什麼來提高性能。 我的第一個想法是序列化完整的數據 - 但是如何反序列化具有2K或更多記錄的ArrayList的性能? 有沒有辦法阻止我的靜態ArrayList的回收?

+4

2000條記錄不應該花很長時間才能從數據庫中讀取。另外,您能否解釋爲什麼您需要隨時將所有數據保存在內存中?這聽起來像是反模式,但也許有一些背後的原因。 –

+0

您的應用程序池是否設置爲AlwaysRunning? – ranieuwe

+0

我有很多關係(延遲加載需要很長),我的記錄是層次結構,我需要重建層次結構。 是的,應用程序設置爲「AlwaysRunning」,但清理清除它。 – user6537157

回答

1

我建議你改用ASP.NET的application cache機制。但是,默認情況下,緩存仍在內存中,並在流程中保留,所以應用程序池回收仍會將其清除。解決方案是更改應用程序緩存的存儲位置,以便它處於不同的進程中。有關如何存儲應用程序緩存的一些建議,請參閱this answer

總之,我不建議儘量避免應用程序池回收,因爲它可以真正爲您節省很多麻煩。

+0

謝謝,明天我會看看。 – user6537157