2010-06-08 34 views
1

我目前使用.NET Entity Framework的自我跟蹤實體,但是我想加快執行查詢的速度。具有預生成視圖的自跟蹤實體

大家似乎首先建議的是在編譯時爲模型生成視圖。

使用ssdl文件等,我能夠創建一個'MyModel.Views.cs',這是編譯在我的項目。但是,我看到這沒有任何好處,這是怎麼回事?我在這裏錯過了什麼嗎?如果我正在使用自我跟蹤實體,我是否從中獲益?

還有哪些其他方法可以提高Entity Framework的性能? 如何創建預編譯視圖,但使用參數提供?例如,搜索查詢需要採取各種不同的參數,但可以做得更快!

感謝

回答

0

嗯,記得預先生成的觀點僅幫助某些操作。它們有助於實體框架本身構建的查詢。例如,如果您在相關屬性上執行Load,則預生成視圖將在可用時使用。另一方面,如果您正在進行投影或自定義Where調用,則不能使用預先生成的視圖,因爲它們不表示您的自定義查詢。所以這取決於你在做什麼。

視圖預生成的優點是它接近免費。稍微擺弄一下你的項目文件,你會在某些操作上獲得性能提升。但它並沒有使的一切更快。

+0

我看到,我的印象是需要更少的時間來解釋我的查詢,但是您所說的話是有道理的。謝謝你的時間! – James 2010-06-09 06:58:34

0

無論您使用哪種查詢,都會使用預生成的視圖。讓我解釋什麼是預先生成的視圖。當您第一次查詢實體數據模型時,它將轉換爲esql視圖。這是在查詢模型時在運行時和按需發生的第一步。一旦創建了該視圖,它就會在應用程序域的整個生命週期內被緩存。然而,生成視圖只是一次性費用,就像asp.net網站一樣,當有人第一次訪問您的網站時會首先觸及。你確實爲第一個用戶節省了時間,但在那之後它確實是相同的體驗。只有在您的模型很大並且第一個查詢的啓動成本較高時,才應考慮預生成視圖。一般來說,有很多方法可以提高自我跟蹤實體和EF的性能。我在我的書中有一整章講述如何提高EF的性能。