6

私は NHibernate を数か月間非常に集中的に使用しており、非常に強力だと感じていますが、私にとってこれは時々あなたを傷つける可能性のある種類のツールです。マッピング、LINQ クエリ、またはエンティティを使用するコードの比較的単純な変更が予期しない動作につながる状況がたくさんありました。私の最も「見事な成功」は、データベースではなくコードでコンポーネント コレクションをソートしていたという理由だけで、N+1 回の削除と挿入を行った読み取り操作を実行したことです。

NHProfのおかげで、このような問題のいくつかを追跡できますが、リファクタリングや要件の小さな変更を行った後でも、データ アクセス レイヤーが正しく効率的に動作するかどうか確信が持てません。変更のたびに手動でテスト/プロファイリングするのは、なんとなく面倒です。ここで期待するのは、内部でのNHibernate の動作(つまり、生成される SQL、実行されるクエリの数、ロードされるエンティティの数、結合されるテーブルの数など)を単体テストする何らかの方法です。

主な ORM の目的からは少しずれているかもしれませんが、適切に実行する必要があるアプリケーションでは、抽象化よりも低レベルの知識の方が重要であるように思えます。

このアイデアに似た実装はありますか? NHibernate アプリケーションのプロファイリングを自動化するにはどうすればよいですか?

4

1 に答える 1

6

この目的で私が使用したのはStatisticsです。

IStatisticsセッション ファクトリからインスタンスを取得し、実行されたクエリの数、キャッシュ ミス、実行時間など、多くのパフォーマンス インジケーターを取得できます。

これにより、適切な呼び出しを実行する単体/統合テストを設定し、それらのインジケーターが予想される参照パラメーター内にあることを確認できます。

于 2011-05-23T21:11:31.197 に答える