|
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="Host=nc-lnx02; Password=login4;Pooling=False;SID=CP31;User ID=login4;Reauthentication Enabled=true"" providerName="System.Data.EntityClient" />
接続統計情報に対するデータ プロバイダーのサポートについては、接続統計情報の取得を参照してください。
エンティティ データ モデル(EDM)を使って大きなモデルを構築すると、非常に効率が悪くなる可能性があります。最適な結果を得るために、モデルのエンティティが 50 から 100 に達している場合は、モデルを分割することを考慮してください。
XML スキーマ ファイルのサイズは、モデルを生成する基となったデータベースのテーブル、ビュー、またはストアド プロシージャの数にある程度比例します。スキーマ ファイルのサイズが大きくなるにつれ、メタデータの In-Memory モデルの作成や解析にかかる時間が増えます。これは、ObjectContext インスタンスごとに負担する、1 回限りのパフォーマンス コストです。
このメタデータは EntityConnection 文字列に基づいて、アプリケーション ドメインごとにキャッシュされます。つまり、1 つのアプリケーション ドメインの複数の ObjectContext インスタンスで同じ EntityConnection 文字列を使用している場合、アプリケーションがメタデータの読み込みに関してコストを負担するのは 1 回だけということです。しかし、モデルのサイズが大きくなる場合や、アプリケーションが長期にわたるものでない場合には、パフォーマンス コストが重要になる可能性があります。
|