是NHibernate的新手。执行以下测试需要11.2秒(调试模式) 我在所有测试中都看到了这个大的启动时间(基本上创建第一个会话需要花费大量时间)
setup = Windows 2003 SP2 / Oracle10gR2 最新的CPU / ODP.net 2.111.7.20 / FNH 1.0.0.636 / NHibernate 2.1.2.4000 / NUnit 2.5.2.9222 / VS2008 SP1
using System;
using System.Collections;
using System.Data;
using System.Globalization;
using System.IO;
using System.Text;
using System.Data;
using NUnit.Framework;
using System.Collections.Generic;
using System.Data.Common;
using NHibernate;
using log4net.Config;
using System.Configuration;
using FluentNHibernate;
[Test()]
public void GetEmailById()
{
Email result;
using (EmailRepository repository = new EmailRepository())
{
results = repository.GetById(1111);
}
Assert.IsTrue(results != null);
}
//In my Repository
public T GetById(object id)
{
using (var session = sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction())
{
try
{
T returnVal = session.Get<T>(id);
transaction.Commit();
return returnVal;
}
catch (HibernateException ex)
{
// Logging here
transaction.Rollback();
return null;
}
}
}
查询时间非常短。结果实体非常小。后续查询没问题。
它似乎开始了第一次会议。
还有其他人看过类似的东西吗?
edit1:
public RepositoryBase()
{
config = Fluently.Configure()
.Database(OracleClientConfiguration.Oracle10
.ConnectionString(c => c.FromConnectionStringWithKey("DBCONSTRING"))
.Driver<NHibernate.Driver.OracleDataClientDriver>().ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MYASSEM>())
.BuildConfiguration();
sessionFactory = config.BuildSessionFactory();
}
答案 0 :(得分:4)
您可以查看this。基本上,它是关于第一次持久化您的配置,然后反序列化它以便稍后重用。
答案 1 :(得分:3)
每次新建存储库时,都不应该新建一个SessionFactory。
每个应用程序运行(包括单元测试)只应创建一次SessionFactory。这是一个非常耗时的操作。
如果您进行了更改,您的表现应该会恢复正常/预期的效果。
答案 2 :(得分:1)
您是否在DEBUG级别使用log4net? NHibernate appender将在该级别进行alsolog,除非您以不同方式配置它。它在DEBUG级别记录了大量信息,这是导致状态缓慢的常见原因。尝试仅更改NHibernate appender的级别,例如:
<log4net>
<root>
<appender-ref ref="SqlServerAppender" />
<level value="DEBUG" />
</root>
<logger name="NHibernate">
<level value="ERROR"/>
</logger>
</log4net>