2012-02-08 11 views
1

コレクションの水和中にnHibernateのパフォーマンスの問題を処理しています。 nHibernateで生成されたクエリは1〜3秒で終了しますが、水分補給はわずか50〜90のオブジェクトに対して7〜9秒かかります。 1つの結果セットから水和された結合されたオブジェクトの複数のレイヤーがあり、データはキャッシュの恩恵を受けるためにあまり重複しません。 nHibernateを取り出すことは疑問ではありません。私は単純に水分補給をより速くする方法を考え出しています。nHibernateを使用するuse_reflection_optimizer

名前付きクエリを使用するようにnHibernateコードを分割し、異なるレイヤーのオブジェクトをどのように水和させるかを制御することを考えています。また、nHibernateのuse_reflection_optimizerパラメータも見つかりました。それは素晴らしいようだが、使い方についての情報はほとんどない。

1)リフレクションオプティマイザはデフォルトで有効になっていますか?私は.NET 4.0を使用しているので、デフォルトで有効になっているようですが、これに対して明確な答えが見つかりません。

2)use_reflection_optimizerがデフォルトで「true」でない場合、どのように有効にしますか?それはweb.configを通して私のためにはうまくいかず、コードまたはセクションの設定で行うべきだと私は読んでいます。誰かが例を挙げることができますか?

3)私のオブジェクトの水和を速めるための他の提案はありますか?

+0

ステートレスセッションを試しましたか?つまり、このデータを読み取り専用として扱うことができれば – Rippo

答えて

2

デフォルトではuse_reflection_optimizerが有効になっていますが、起動時に初めてオブジェクトの一部に接触するときに実行時に必要なリフレクション機能が多く生成されます。それはスタートアップを長くしますが、長期的にはより良いです。

私は、NHibernateが、リフレクションオプティマイザを使わなくても、名前付きHQLクエリをSQLに変換すると思います。

ここで、そのクエリのパフォーマンスについて、いくつかのコードを共有できますか? eager fetch/join help?

関連する問題