0

実稼働環境で Nh-Prof を実行したところ、NHibernate セッションを開き、トランザクションを開始してコミットするまでに、状態やデータベースへのクエリがなくても 4 秒以上かかる場合があることがわかりました。

** トランザクションを開いて、理由もなく (ステートメントなしで) コミットすることはバグであることを私は知っています。

これは私が Nh-Prof で見るものです:

begin transaction with isolation level: Unspecified
commit transaction

助言がありますか?

4

1 に答える 1

1

最も可能性の高い理由:

使用されるセッションはオブジェクトで「いっぱい」であり、コミット時に各オブジェクトが変更されているかどうかをチェックして、更新ステートメントを生成します。何も変わらなかったとしても、チェックにはコストがかかります。

session.GetSessionImplementation().PersistenceContext.EntitiesByKey.Countオブジェクトの数を確認できます。

それについてあなたができること:

  • このセッションを使用して読み取り専用データをロードしないでください (例: 読み取り専用グリッドを埋める)
  • 途中で、トランザクションに不要で変更されていないオブジェクトに対して session.Evict を使用します。
于 2015-01-16T08:05:09.783 に答える