2012-03-19 22 views
1

我正在使用EF從我的數據庫中獲取並創建一些對象。我需要在兩個不同的迭代中使用這些對象。在第一次迭代中,我從我的數據庫中獲取它們。在第二我需要再次使用對象。使用EF檢索並創建它們後,我應該將內存保存在內存中嗎?

如果我將內存中的對象保存在List中,而不是再次從數據庫中檢索它們,還是EF將它們保存在內存中,因爲它們最近已被使用,第二次迭代會更快嗎?

+0

將是很好的提供了一個例子,目前尚不清楚第一次迭代和第二次迭代之間的差異。通過將對象保存在列表中是什麼意思? – 2012-03-19 08:56:29

+0

是的,我也無法在這裏看到問題。答案似乎非常明顯。但是你可能會問EF爲你提供的所有不同的可能性? – squelos 2012-03-19 09:03:08

回答

0

嘛?您只存儲對重量輕的對象的引用。

1

你應該使用Local財產Load對象在這樣的記憶,使他們可以訪問:

context.YourTable.Load(); 

,然後你應該使用Local屬性來迭代你想多次。

foreach(var obj in context.YourTable.Local) { 
//// 
} 

您還可以使用ToList()所以你的項目將在內存中,如果你需要他們剛過,爲什麼不乾脆讓他們加載到內存中

1

除非您禁用了跟蹤功能,否則EF將在DbContext對象的生命週期中保持查詢內存中的對象。

如果你不想更新對象,我會建議通過將它們保存到內存中,而不將它們保存到DBcontext中,因爲這樣可以提高性能。您可以通過將.AsNoTracking()添加到您的查詢來完成此操作。

如果你想持續對象的持續時間超過上下文的生命週期,你可以通過將它們緩存在內存中來實現。您可以稍後重新將它們連接到瓶坯更新

1

當然,從內存中檢索的速度會更快。順便說一句,如果你想從內存中獲取對象,則不必將其存儲在列表中,只需使用Local EF功能之一即可。

0

嘗試使用高速緩存方法特別適用於那些沒有改變對象的經常

相關問題