ASP.NET MVC中的NHibernate事务管理 - 应该怎么做?

adr*_*rin 7 asp.net nhibernate asp.net-mvc design-patterns transactions

我正在编写一个简单的ASP.NET MVC,使用每个请求的会话和每个请求模式的事务(自定义HttpModule).它似乎工作正常,但..性能很糟糕(一个简单的页面加载~7秒).对于每个http请求,包含图形资源(网站上的所有图像)都会创建一个事务,这似乎会延迟加载时间(没有每个图像的事务加载时间约为1-10毫秒,事务超过1秒) .在ASP.NET MVC + NH堆栈中管理事务的正确方法是什么?

当我将所有事务放入我的存储库方法时,由于一些不明原因,我在NHProf中得到了"隐式事务"警告(SQL语句在事务外执行,甚至在代码session.Save()/ Update()/ etc方法中执行在事务'使用'范围内和在事务.Commit()调用之前调用BTW是隐式事务真的很糟糕吗?

Jam*_*Ide 3

您需要使用上下文会话,以便不会在每次请求图像资源等时创建新的会话和事务。请参阅我对此问题的回答。此更改应该会显着提高性能。这可能也是隐式交易警告的根本原因。

NH 应用程序的另一个常见性能问题是使用 DEBUG 级别的 log4net。

编辑:Min 和 Kevin Pang 的回答也是很好的建议,所以我不会重复他们的陈述。