Entity Framework (EF) 5はEF 4と比べて大幅にパフォーマンスを改善すると約束されているが、ORMを効率良く使うには、ビュー生成、キャッシュ、自動コンパイルクエリ、クエリ実行オプション、設計時の配慮など、考慮すべきことがある。
これに関連して、Microsoftはホワイトペーパーをリリースした。ここにはまだリリースされていないEntity Framework 5を使ったときのパフォーマンスの考慮事項について、いろいろと説明されている(今度の.NET 4.5で動作する)。
見ておくべき興味深いポイントを以下にあげる。
- コールド対ウォーム クエリ実行 – クエリの初回実行時には、オーバーヘッドとなるビュー生成ステップ(データベーススキーマを概念スキーマにするのに必要な変換など)がある。 – それ以後の実行はビューキャッシュによって高速化される。ビューを事前生成することで、パフォーマンスを改善できる可能性がある。
- キャッシュ – オブジェクトレベルにおける(具体的にはAutoDetectChangesを無効にすることと合わせてDbContext Find()を改善)、クエリ計画のキャッシュ、メタデータのキャッシュ、リザルトのキャッシュ。EFにはまだセカンドレベルキャッシュがないが、その実装指針は存在する。CodePlexにあるサンプルとJulia Lerman氏の記事 “Second Level Caching in Entity Framework and Windows Azure”を参照。
- NoTrackingクエリのオプション(状態トラッキングのオーバーヘッドがない)。これはObjectQueryにのみ使え、DbSetやDbQueryクラスには使えない。
- 高速なMicro-ORMスタイルの、DatabaseのSqlQueryとExecuteStoreQuery
- 設計時の配慮 – TPH (Table-per-hierarchy) 対 TPT (Table-per-Type) 対 TPC (Table-per-Class)。結果得られるクエリの複雑さとパフォーマンスの観点からはTPTが最悪だ。
- Lazy 対 Eager ローディング
Entity FrameworkはMicrosoftが無償提供している.NETアプリケーション向けの商用ORMだ。.NET開発者向けにはEF以外にも、(オープンソース、商用含め)NHibernateやLightSpeedのような成熟した製品、Dapper.NET, PetaPocoやMassiveのような軽量なMicro-ORMが利用可能だ。