2009-07-19 107 views
3

我們正在爲我們的ASP.NET應用程序使用ADO.NET實體。ADO.NET實體框架 - 預生成視圖 -

我讀過預先生成的視圖提高了性能。提到博客文章,

http://blogs.msdn.com/adonet/archive/2008/06/20/how-to-use-a-t4-template-for-view-generation.aspx,我生成的意見。所產生的命名空間&類作爲

namespace Edm_EntityMappingGeneratedViews 
{ 


    /// <Summary> 
    /// The type contains views for EntitySets and AssociationSets that were generated at design time. 
    /// </Summary> 
    public sealed class ViewsForBaseEntitySets4D4A6E0AA7AF6B2298FABB4F22235831 : System.Data.Mapping.EntityViewContainer 
    { 

     /// <Summary> 
     /// The constructor stores the views for the extents and also the hash values generated based on the metadata and mapping closure and views 
     /// </Summary> 
     public ViewsForBaseEntitySets4D4A6E0AA7AF6B2298FABB4F22235831() 
     { 
      this.EdmEntityContainerName = "JSEntities"; 

我將此添加到我的數據層和測試性能。看不到太多的改進。 CPU使用率始終達到20-30%的利用率(響應時機良好),並在500毫秒 - 1秒內降低迴0%。我認爲每次都會因爲視圖生成而使CPU利用率變高。

儘管MyModel.edmx & MyModel.Views.cs與文件名匹配,但我無法理解實體框架如何知道這是我的模型事件的預生成視圖類。

我是否需要更新Web.Config或App.Config以將View類映射到某個位置?

請說明。

+0

檢查哪個進程正在使用CPU。你的SQL Server在同一臺機器上嗎? – 2009-07-19 21:14:26

回答

5

我一直在想同樣的事情,一直在挖一些東西。

據我所知,生成的類文件包含程序集級屬性EntityViewGenerationAttribute,它定義了包含預編譯視圖的類類型。 然後,在這裏我只做有根據的猜測,在編譯時,類必須通過反射加載,並以某種方式綁定到視圖定義的查詢。可能在ESQL緩存中,這會產生一定的意義。

即使視圖是預編譯的,它們只會生成ESQL,而不會運行實際的TSQL。然而,預編譯視圖確實允許查詢的執行跳過驗證和ESQL生成步驟,該步驟應該略微提高性能,特別是對於大型複雜查詢。