我的问题是我该怎样做才能确定缓慢的原因,或者如何在不知道确切原因的情况下加快速度。
我正在运行一个简单的查询,看起来回到实体的映射正在耗尽。结果集是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);
}
探查器告诉我它正在执行查询7ms / 35257ms,我假设前者是db的实际响应,后者是NH做魔术的时间。
35秒太长了。这是一个简单的映射,一个表,嵌套组件,使用流畅的接口来做映射。我只是启动一个简单的控制台应用程序并运行一个查询,在SessionFactory初始化后测量缓慢,应该只有一个会话,我没有使用事务。
由于
答案 0 :(得分:2)
如果您的数据库查询快速返回,则问题出在代码本身的某个位置。它不太可能出现在NHibernate中。您的评论意味着您正在使用自定义用户类型,而且很可能在那里存在效率特别低的问题。我猜你正在使用NHProf作为你的探查器?也许您应该使用直接的.NET分析器并查看代码本身的性能,包括这些自定义类型?像Ants,dotTrace或AQTime这样的东西。
答案 1 :(得分:0)
您的用户类型可能需要花费大量时间
答案 2 :(得分:0)
尝试禁用log4net。如果它加快速度并且您仍然希望将其用于其他目的,请仅禁用nhibernate。