2012-01-05 131 views
0

我遵循每個請求模式的會話。 爲了管理ISessionFactory我使用線程安全singletone:asp.net Nhibernate會話管理

public class SessionManager 
    { 
     private static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
     private readonly ISessionFactory sessionFactory; 
     public static ISessionFactory SessionFactory 
     { 
      get { return Instance.sessionFactory; } 
     } 
     private ISessionFactory GetSessionFactory() 
     { 
      return sessionFactory; 
     } 
     public static ISession OpenSession() 
     { 
      return Instance.GetSessionFactory().OpenSession(); 
     } 
     public static ISession CurrentSession 
     { 
      get 
      { 
       if (!CurrentSessionContext.HasBind(Instance.GetSessionFactory())) 
        return null; 
       return Instance.GetSessionFactory().GetCurrentSession(); 
      } 
     } 


     public static SessionManager Instance 
     { 
      get 
      { 
       return NestedSessionManager.sessionManager; 
      } 
     } 
     private SessionManager() 
     { 
      Log.Info("Start creating factory"); 
      Configuration configuration = new Configuration().Configure(); 
      sessionFactory = configuration.BuildSessionFactory(); 
      Log.Info("End creating factory"); 

     } 

     class NestedSessionManager 
     { 
      internal static readonly SessionManager sessionManager = 
       new SessionManager(); 
     } 
    } 

據我瞭解我曾經爲所有的用戶請求建立工廠,但我在日誌中,我廠再現每15-45分鐘看。它的構建需要很長時間,所以我的應用程序加載速度很慢。

我的想法出了什麼問題?

回答

3

有一些事情可以發生,可以重新啓動您的應用程序。你確定沒有these發生?