這個讓我困惑。實體框架投影到類比選擇EF POCO對象更快,爲什麼?
我正在使用EF 4.1並將模板應用於模型以使用POCO和POCO代理(公共無參考代理,所有屬性都是虛擬的,所有導航屬性均爲ICollection)。
我有一個表中有大約1.1M條記錄。我正在做一些時間測試,看看需要多長時間來檢索這些數據並得到一些意想不到的結果。
此調用返回在約21秒時:
ctx.Valuations.MergeOption = MergeOption.NoTracking
var entityValuations = ctx.Valuations.OfType<Foo>().ToArray();
該呼叫需要9秒:
ctx.Valuations.MergeOption = MergeOption.NoTracking
var entityValuations = ctx.Valuations.OfType<Foo>().Select(v => new Val()
{
ID = v.ID
...
//set all properties
....
}).ToArray();
這兩個語句之間的唯一區別是,第一返回EF POCO代理和所述第二將結果集投影到非代理poco中。這就是性能時代的巨大差異!對於爲什麼而不能提出任何正當理由,我完全難以置信。
有沒有人知道爲什麼第二個陳述是如此之快?
這是SQL緩存嗎?你運行過多少次?您是否清除了所有運行之間的緩存? – cjk