2012-12-25 53 views
-1

我正在尋找一種非常快速的方式來釋放(分離)部分或可能是完整的對象集,而不會丟棄其他類型的對象集實體。實體框架 - 從以前加載的實體釋放內存

在我們的場景中,我們使用了很多帶有主要objectcontext的對象集。 一些表格將來會有非常大量的數據,我們不想在內存中完全加載。只有最後一年的數據將被加載啓動過濾器,並且如果用戶希望他可以將過濾器更改爲其他內容。過濾部分的工作很簡單,但如果過濾器僅加載之前尚未加載的實體,則舊實體將通過objectcontext保存在內存中。在非常快速的計算機上卸下1-2000個實體可能需要4-5秒。即使對我來說這也是不可接受的,特別是在只有一次過濾器更改的情況下,該數字可以並將會超過40000。

回答

2

如果您正在使用實體框架,那麼這應該不會成爲問題。

EF被設計爲具有短暫的對象上下文。您爲每個操作創建一個上下文,並在操作完成後將其銷燬。保持對象上下文長時間存活是一個壞主意,儘管不像桌面應用程序那樣糟糕。

通過長時間保持上下文很少有收穫。

EF無法從對象圖中移除對象,因爲它旨在在您完成操作時破壞上下文。銷燬上下文是釋放內存的有效方式。

+0

+1。基本上「停止戰鬥實體框架」。整個「主要目標文字」已經是一個嚴重的錯誤。 – TomTom

+0

如果你爲每個加載操作使用不同的上下文,當你有兩個連接的表時,你如何反擊以下問題: –

+0

等同的方法會說,實體的其他列表各自不同於實體從第一個列表中;相同的實體將被加載多次。例如:位置表與國家表有連接。當Place表格加載時,它也會爲每個地點項目加載1個國家,當你加載整個國家/地區表格作爲組合框選擇列表或其他原因時,你會得到一個完整的列表再次加載。 –