私はAsp.NET webform、NHibernateを使用してWebアプリケーションを作成し、SQL Server 2008データベースにアクセスし、StructureMapをIOC Containerとして作成しました。NHibernate StructureMap ASP.NET webform System.OutOfMemoryException
ほとんどのユーザーがそれを使用しているので、すべてがうまくいくようです。ときに、ユーザー数が増加(私たちは10+ユーザーを言うことができます)このエラーでWebアプリケーションがクラッシュ:
System.OutOfMemoryExceptionに
私はレッドゲートアリスイートをダウンロード:パフォーマンスツールは、最大CPU時間がGETALLのためにNHibernateのcreateSessionFactoryであることを述べています要求。
これは私の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変数を作成したばかりのファクトリに割り当てないので、毎回 –
が動作するたびに新しいセッションファクトリが作成されます! thx a lot – frabiacca