我們需要很長時間才能將我們的linq首次運行到EF查詢。我很驚訝地發現在預生成視圖之後沒有區別。我遇到下列要求跑stackoverflowLinq到實體的性能和預生成視圖
查看一代不僅有助於對「標準」的查詢(例如,當你調用someObject.RelatedEnd.Load()或MyContext.SomeSetName(),它不幫助廣告即席查詢使用LINQ或ESQL,原因顯而易見。使用CompiledQuery優化這些。
當他說「由於顯而易見的原因:」我不得不說,「哦,不是明顯對我呢。」如果我沒有理解這個正確地他聲稱Linq SQL查詢不受預生成EF視圖的影響。
我曾想過實體vie ws是實體和表之間的通用映射,與任何特定查詢都沒有關係。這是錯誤的嗎?
我可以看到我們的Linq to Entities查詢的第一次運行中使用了大量的時間,其後的時間顯着更短,所以我假定正在爲相關實體和表生成視圖。如果它不是可以預先生成所有第一次運行時間的EF視圖,那麼它是什麼?
所以我的問題有三個部分:
爲每個查詢生成EF的觀點,還是僅僅涉及表,實體不管查詢製成?
上述聲明是否預生成EF視圖在Linq到EF查詢中沒有區別是正確的?是否必須改用CompileQueries?
- 上面提到的「顯而易見的原因」是什麼?
注:我甚至不會問,但如果您使用EF,在互聯網上(包括msdn)有很多建議來預生成視圖。這是我見過的唯一的地方,它建議如果你使用Linq到Entities,那麼pregenerating與你的查詢無關。
這對我來說是非常熱門的,因爲我使用TPH繼承來構建由複雜類型屬性組成的子類。子類的預生成視圖對初始加載時間沒有影響,可以是40秒。連續負載需要0.5秒。我正在使用EF5。是的,我正在考慮升級到EF6,但我擔心EF6運行時現在本身需要首次運行Jitting。 – SamJolly