代码之家  ›  专栏  ›  技术社区  ›  Rob Allen

NHibernate慢映射

  •  0
  • Rob Allen  · 技术社区  · 15 年前

    我的问题是,我能做些什么来确定缓慢的原因,或者在不知道确切原因的情况下,我能做些什么来加快速度。

    我运行的是一个简单的查询,似乎要花很长时间才能映射回实体。结果集是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,我假设前者是来自数据库的实际响应,而后者是NH实现它的魔力所需的时间。

    35秒太长。这是一个简单的映射,一个表,嵌套组件,使用Fluent接口进行映射。我只需启动一个简单的控制台应用程序并运行一个查询,在初始化sessionFactory后测量慢度,应该只有一个会话,并且我不使用事务。

    谢谢

    3 回复  |  直到 14 年前
        1
  •  2
  •   David M    15 年前

    如果数据库查询返回得很快,那么问题就出在代码本身的某个地方。它不太可能是在NHibernate。您的评论意味着您正在使用自定义用户类型,很可能其中有一些特别低效的内容。我猜你是在用NHPROF做你的档案?也许您应该使用一个直接的.NET事件探查器来查看代码本身的性能,包括这些自定义类型?有点像蚂蚁、点迹或AQTIME。

        2
  •  0
  •   Ayende Rahien    15 年前

    很可能您在用户类型中做了一些需要花费大量时间的事情。

        3
  •  0
  •   Terlisimo    14 年前

    尝试禁用log4net。如果它加快了速度,而你仍然想把它用于其他目的,只禁用NHibernate。