0

ほとんど再起動されない Windows サービスで NHibernate.ISession 実装の 1 つのインスタンスを作成することに害はありますか? 私は ISession をよく理解していませんが、私が理解していることから、ISession 実装のインスタンスは、変更をコミットするとすぐに破棄できるトランザクションへの参照を保持しています

using (ITransaction trans = MyISession.BeginTransaction())
{
 ...
trans.Commit();
}

コードサンプルをオンラインで確認すると、autofac を使用した ISession の実装はほとんどの場合、InstancePerLifetimeScope() として設定されています。これは事実上、インスタンスが作成されたコンテキスト (HTTP リクエストなど) から出るとすぐにインスタンスが破棄されることを意味します。

長時間実行されている Windows プロセスの autofac で nhibernate を単一のインスタンスとして登録することの害について (もしあれば) 教えてもらえますか?

builder.Register(c => new MyIsessionFactory.OpenSession()).As<ISession>().SingleInstance();
4

1 に答える 1

3

セッションは、ロードした、または参照したすべてのエンティティとコレクションを追跡します。

アプリの存続期間全体にわたってセッションを開いたままにすると、次の結果になります。

  • 非常に高いメモリ使用量
  • 非常に遅い操作 (多くの操作で自動的に行われる、読み込まれたエンティティのリストのスキャンは、数が多すぎると非常に時間がかかります)
  • エラーから回復することは不可能です。セッション状態があると破損するためです。
于 2013-06-06T23:48:08.650 に答える