我已經在我的通用EF倉庫的Add()方法中實現了檢查我要插入的行是否已經存在於表中,如果存在,請使用當前可用的信息進行更新。List <>優化,有什麼可能?
private List<T> _previousEntries;
//Try and find one with same PK in the temporary tables...
var previousRow = _previousEntries.Single(n => (int)n.GetType().GetProperty(_PKName).GetValue(n, null) == entPKValue);
//If we did find one...
if (previousRow != null)
{
//Update the row...
return;
}
//Add it...
所以我知道,我使用的反射,這是緩慢的,但我還沒有找到另一種方式,因爲不同的機構有不同的SQL PK的名字。
但我不知道反思是這裏最大的問題,有時,_previousEntries將容納80萬項。
_previousEntries在存儲庫類的類構造函數中將其項分配給它。 _PKName也根據T的類型在類構造函數中分配一個值。
如果我只在Single()語句中設置一個斷點,它肯定會處理2-3秒,所以我不會知道如何才能確定這裏的瓶頸是什麼:在800,000件物品上反射或Single()...在5000件物品清單中它肯定會更快。
有沒有意見?我能做些什麼來優化我的列表?
接受的,因爲顯示的解釋和解決辦法回答一個repositiory如何使用。我還沒有實現這個詞典,但是這個,加上下面關於排序列表的建議,大大加快了速度。 –