public static class NHibernateContextSessionFactory { private const string CurrentSessionKey = "nhibernate.current_session"; private static ISessionFactory sessionFactory;//这个在程序运行中.不明白为什么会为空,他是静态的呀.. //静态构造函数 这个构造函数 还会经常运行其中 sessionFactory就为NULL了 static NHibernateContextSessionFactory() { if (sessionFactory == null) { Stopwatch sw = new Stopwatch(); sw.Start(); sessionFactory = new ConfigurationBuilder().Build().BuildSessionFactory(); sw.Stop(); Debug.WriteLine("获取session工厂耗时:" + sw.ElapsedMilliseconds + " 毫秒"); } } public static ISession GetSession() { ISession currentSession = CallContext.GetData(CurrentSessionKey) as ISession; if (currentSession == null) { currentSession = sessionFactory.OpenSession(); CallContext.SetData(CurrentSessionKey, currentSession); } return currentSession; } }
问题: 我发现 网站有时候访问特别快,但有时候就特别慢。
研究下来 发现时由于 sessionFactory = new ConfigurationBuilder().Build().BuildSessionFactory();
特别耗时间,每次BuildSessionFactory() 都会耗时1秒,而 这不是最重要的,最重要的是 他还会经常执行,奇怪的问题就在这里了 sessionFactory是个静态的对象啊,按道理讲 他只会运行一次,怎么会重复运行呢?
网站的架构是 UI->BLL->DAL层的 某个仓储(**Repository)->仓储中 调用的上述类中的GetSession()。
求大神指教,我自己也做了一个别的小测试,在那个测试中是没有问题的,静态构造函数 只会运行一次,但这个会重复运行。。。
求解决,一点思路都没有,不知道问题出在哪里了。。
静态构造函数 多次执行,何以证明
NHibernateContextSessionFactory在自动的执行么?
加一个断点 看一下调用堆栈,是否有其他地方在调用?
这个确实是重复运行,具体原因不明白,单例模式等各种都使用了。
我在Application_End方法内 记录了一条运行 日志:系统停止。
后来查日志发现,系统经常停止,也就是说经常运行Application_End 方法,原因可能是网站配置的问题,但由于上面着急,没时间去研究问题根源,转用其它方法了,现在还在寻求结果中...
求大侠帮助。。