私はnhibernateを使用するWebサービスを持っています。リポジトリライブラリにシングルトンパターンがありますが、サービスを呼び出すたびに非常に高価なセッションファクトリの新しいインスタンスが作成されます。私に何ができる?Webサービスでnhibernate sessionfactoryインスタンスが複数回
#region Atributos
/// <summary>
/// Session
/// </summary>
private ISession miSession;
/// <summary>
/// Session Factory
/// </summary>
private ISessionFactory miSessionFactory;
private Configuration miConfiguration = new Configuration();
private static readonly ILog log = LogManager.GetLogger(typeof(NHibernatePersistencia).Name);
private static IRepositorio Repositorio;
#endregion
#region Constructor
private NHibernatePersistencia()
{
//miConfiguration.Configure("hibernate.cfg.xml");
try
{
miConfiguration.Configure();
this.miSessionFactory = miConfiguration.BuildSessionFactory();
this.miSession = this.SessionFactory.OpenSession();
log.Debug("Se carga NHibernate");
}
catch (Exception ex)
{
log.Error("No se pudo cargar Nhibernate " + ex.Message);
throw ex;
}
}
public static IRepositorio Instancia
{
get
{
if (Repositorio == null)
{
Repositorio = new NHibernatePersistencia();
}
return Repositorio;
}
}
#endregion
#region Propiedades
/// <summary>
/// Sesion de NHibernate
/// </summary>
public ISession Session
{
get { return miSession.SessionFactory.GetCurrentSession(); }
}
/// <summary>
/// Sesion de NHibernate
/// </summary>
public ISessionFactory SessionFactory
{
get { return this.miSessionFactory; }
}
#endregion
どのようにして、すべてのサービスに対して1つのインスタンスを作成できますか?
提案:「throw ex;」は使用しないでください。あなたは "スロー"したい。それ以外の場合は、スタックトレースは例外が "throw ex;"の場所から来たように見えます。 –