【发布时间】:2010-04-15 08:32:10
【问题描述】:
我是 NHibernate 的新手。执行以下测试时需要 11.2 秒(调试模式) 我在所有测试中都看到了这么长的启动时间(基本上创建第一个会话需要大量时间)
设置 = 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;
}
}
}
查询时间非常短。生成的实体非常小。后续查询就好了。
它似乎正在开始第一个会话。
有没有人见过类似的东西?
编辑1:
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();
}
【问题讨论】:
-
你应该得到类似 dottrace 的东西,看看时间花在了哪里。可能是您第一次连接到数据库时发生的事情..?
-
能否请您显示 SessionFactory 初始化的代码以及从该代码中调用的位置?
-
你有多少个映射类?
-
5 个映射类 SessionFactory 在存储库创建上完成: public RepositoryBase() { config = Fluently.Configure() .Database(OracleClientConfiguration.Oracle10 .ConnectionString(c => c.FromConnectionStringWithKey("DBCONSTRING") ) .Driver
().ShowSql()) .Mappings(m => m.FluentMappings.AddFromAssemblyOf ()) .BuildConfiguration(); sessionFactory = config.BuildSessionFactory(); } -
嗨。我做了一个“dottrace”,45% 的时间都在等待创建工厂,这正常吗:(
标签: performance nhibernate fluent-nhibernate