【发布时间】:2011-06-09 18:05:26
【问题描述】:
我通过使用 Asp.NET webform、NHibernate 来访问 Sql Server 2008 数据库和 StructureMap 作为 IOC 容器创建了一个 Web 应用程序。
似乎一切正常,因为很少有用户使用它;当用户数量增加时(我们可以说超过 10 个用户)webapp 崩溃并出现此错误:
System.OutOfMemoryException
我下载了 redgate ant 套件:性能工具说最大 cpu 时间在 NHibernate createSessionFactory 中用于 GetAll 请求。
这是我的 NHibernateHelper 对象:
public static NHibernate.ISessionFactory _sessionFactory;
public static NHibernate.ISessionFactory createSessionFactory()
{
try
{
if (_sessionFactory == null)
{
return
FluentNHibernate.Cfg.Fluently.Configure()
.Database
(
FluentNHibernate
.Cfg.Db.MsSqlConfiguration.MsSql2008
.ConnectionString
(
c => c
.Server(ConfigurationManager.DbConnectionValue.Server)
.Username(ConfigurationManager.DbConnectionValue.User)
.Password(ConfigurationManager.DbConnectionValue.Password)
.Database(ConfigurationManager.DbConnectionValue.Database)
)
.ProxyFactoryFactory("NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu")
)
.Mappings
(
m => m.FluentMappings.AddFromAssemblyOf<Repository.IRepositoryBlocco>()
)
.BuildSessionFactory();
}
else
return _sessionFactory;
}
catch (Exception ex)
{
throw ex;
}
}
这是我从 db 读取数据的方式:
public IList<DomainModel.Model.Variabile> GetAll()
{
try
{
var session_factory = NHibernateHelper.createSessionFactory();
using (var session = session_factory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var query = session.Linq<DomainModel.Model.Variabile>()
.OrderBy(v => v.ordine);
return query.ToList();
}
}
}
catch (Exception ex)
{
throw ex;
}
}
我做错了吗?会不会是引发 OutOfMemoryException 的那个? 最好的问候
【问题讨论】:
-
你永远不会为刚创建的工厂分配 _sessionFactory 变量,所以它每次都会创建一个新的会话工厂
标签: asp.net nhibernate fluent-nhibernate structuremap