Data Provider for .NET Guide (v11)

Entity Framework のパフォーマンスの向上

Entity Framework は強力な生産性の向上を提供しますが、一部の開発者は、アプリケーションでのパフォーマンスの最適化を必要とする機能について、Entity Framework が制御をしすぎると考えています。

ADO.NET には、確立した比較的単純な一連のメソッドが備わっており、それらを使用して、接続統計情報や再認証などの機能の有効化および管理が行えます。ADO.NET Entity Framework データ プロバイダーにはさらに拡張機能が含まれており、それらを使用して、接続に関する統計カウンターの有効化、取得、およびリセットが行えます。開発者は、これらの拡張機能を使用すると、最終的にアプリケーションの実行時のパフォーマンスを向上させることができます。

Entity Framework にも類似した一連のメソッドが含まれていますが、これらは、LINQ、EntitySQL、および ObjectServices などの新しい Entity Framework コンシューマーで利用できるように適応させてあります。

この機能は、.edmx ファイルの使用で示されている XML ファイルでモデル化されます。PsqlConnectionStatistics エンティティおよび PsqlStatus エンティティを公開することにより、標準ツールを使って、このコードをすばやくモデル化することができます。

接続統計情報の取得

まず、エンティティ コンテナーの PsqlConnectionContext を確立します。これには 2 つのエンティティ セット、PsqlConnectionStatistics および PsqlStatus が含まれています。各エンティティと対話するには、結果を取得するための関数を含めます。

次の C# コードでは、ObjectConnect を使用してこれらの統計情報へアクセスする方法を示しています。

DTekConnectionContext objCtx = new 
PsqlConnectionContext(); 
  PsqlStatus status = 
objCtx.DisableStatistics().First(); 
  MessageBox.Show("StatisticsEnabled = " + 
status.StatisticsEnabled); 
  status = objCtx.EnableStatistics().First(); 
  MessageBox.Show("StatisticsEnabled = " + 
status.StatisticsEnabled); 
  PsqlConnectionStatistics statistics = 
objCtx.RetrieveStatistics().First(); 
  MessageBox.Show("BytesReceived/Sent: " +    
statistics.BytesReceived + "/" + 
statistics.BytesSent); 

PsqlConnectionContext は app.config ファイルで宣言されています。

<add name="PsqlConnectionContext"  
connectionString="metadata=res://*/Model1.csdl|res://*/
Model1.ssdl|res://*/Model1.msl;
provider=Pervasive.Data.SqlClient;provider 
connection string=&quot;Host=nc-lnx02;
Password=login4;Pooling=False;SID=CP31;User 
ID=login4;Reauthentication Enabled=true&quot;" 
providerName="System.Data.EntityClient" /> 

接続統計情報に対するデータ プロバイダーのサポートについては、接続統計情報の取得を参照してください。

XML スキーマ ファイルのサイズの制限

エンティティ データ モデル(EDM)を使って大きなモデルを構築すると、非常に効率が悪くなる可能性があります。最適な結果を得るために、モデルのエンティティが 50 から 100 に達している場合は、モデルを分割することを考慮してください。

XML スキーマ ファイルのサイズは、モデルを生成する基となったデータベースのテーブル、ビュー、またはストアド プロシージャの数にある程度比例します。スキーマ ファイルのサイズが大きくなるにつれ、メタデータの In-Memory モデルの作成や解析にかかる時間が増えます。これは、ObjectContext インスタンスごとに負担する、1 回限りのパフォーマンス コストです。

このメタデータは EntityConnection 文字列に基づいて、アプリケーション ドメインごとにキャッシュされます。つまり、1 つのアプリケーション ドメインの複数の ObjectContext インスタンスで同じ EntityConnection 文字列を使用している場合、アプリケーションがメタデータの読み込みに関してコストを負担するのは 1 回だけということです。しかし、モデルのサイズが大きくなる場合や、アプリケーションが長期にわたるものでない場合には、パフォーマンス コストが重要になる可能性があります。


Entity Framework 機能の拡張

ADO.NET Entity Framework でのストアド プロシージャの使用