2009-12-31 175 views
0

我的问题是我能做些什么来确定运行缓慢,或者我能做些什么来加快它不知道确切的原因的原因。NHibernate的慢映射

我运行一个简单的查询,并似乎映射回实体正在采取永远。结果集是350,这在我看来并不多。

IRepository repo = ObjectFactory.GetInstance<IRepository>(); 
var q = repo.Query<Order>(item => item.Ordereddate > DateTime.Now.AddDays(-40)); 

foreach (var order in q) 
{ 
    Console.WriteLine(order.TransactionNumber); 
} 

探查告诉我它是执行查询7毫秒/ 35257ms,我假设前者是从DB的实际响应,而后者是需要NH做它的神奇时刻。

35秒太长。这是一个简单的映射,一个表,嵌套的组件,使用流畅的接口来做映射。我只是启动一个简单的控制台应用程序并运行一个查询,在SessionFactory初始化之后测量缓慢,应该只有一个会话,并且我没有使用事务。

感谢

+1

因此,它是行代码中的2所走的是35秒执行? – 2009-12-31 16:45:22

+0

... 35秒肯定是__after__ SessionFactory被初始化,不包括初始化它的时间? – 2009-12-31 16:51:42

+0

正确的两个计数。 – 2009-12-31 17:02:00

回答

2

如果你的数据库查询迅速恢复,那么问题是某处代码本身。这不太可能在NHibernate中。您的评论意味着您正在使用自定义用户类型,并且很可能是因为那里存在特别低效的内容。我猜你正在使用NHProf作为你的分析器?也许你应该使用一个直接的.NET分析器并查看代码本身的性能,包括这些自定义类型?像蚂蚁,dotTrace或AQTime。

+0

更正探查器。我想这是一个很好的建议,我没有使用这个,因为我只是以为我是错误地配置NHibernate,因为我对它很陌生。 – 2009-12-31 17:12:16

+0

不太可能 - 代码中的速度很慢。试试这样的分析器吧。 dotTrace有10天的试用期,并且相当易于使用。 – 2009-12-31 17:14:07

+0

那么,我在Visual Studio中使用了默认的分析器,时序导致了197ms/543ms。在视觉工作室之外运行应用程序,速度也一样快。有关VS为何如此缓慢的想法? – 2009-12-31 17:58:12

0

很可能是你在做你的用户类型的东西,需要花费大量的时间

0

尝试禁用log4net的。如果它加快速度并且仍然希望将其用于其他目的,则仅禁用nhibernate。