2009-07-19 17 views
3

私たちは、ASP.NETアプリケーションにADO.NET Entityを使用しています。ADO.NET Entity Framework - 事前生成ビュー -

私は、事前生成されたビューがパフォーマンスを向上させることを読んでいます。ブログ投稿、

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%の使用率になり(応答タイミングは良好です)、500ms〜1秒で0%に戻ります。毎回ビュー生成のためにCPU使用率が高くなると思います。

MyModel.edmx & MyModel.Views.csがファイル名と一致しても、エンティティフレームワークがモデルイベントの事前生成されたビュークラスであることがわかっていません。

Web.ConfigまたはApp.Configを更新して、Viewクラスをどこかのモデルにマップする必要がありますか?

明確にしてください。

+0

CPUを使用しているプロセスを確認します。 SQL Serverは同じマシンにありますか? –

答えて

5

私は同じことを思っていて、掘り下げています。

生成されたクラスファイルにはアセンブリレベルの属性EntityViewGenerationAttributeが含まれていることがわかります。プリコンパイル済みのビューを含むクラスの型を定義しています。 次に、教育的な推測を行うだけで、コンパイル時にクラスはリフレクションによって読み込まれ、ビューによって定義されたクエリにバインドされなければなりません。おそらくESQLキャッシュにあります。これは一定のセンスを作ります。

ビューはあらかじめコンパイルされていても、実行される実際のTSQLではなく、ESQLのみを生成します。しかし、プレコンパイル・ビューでは、特にコンパイルされた大規模な問合せに対して、わずかなパフォーマンス向上をもたらす検証およびESQL生成ステップをスキップする問合せの実行が可能です。

関連する問題