我注意到NHibernate创建的一些查询是作为批处理执行的,而其他查询则不是。当我使用Sql Server Profiler配置数据库时,这些查询的事件类型列为“SQL:BatchStarting”,后跟“SQL:BatchCompleted”,而不是简单的RPC:已完成。
有没有理由说某些语句是作为批处理运行的,有些则不是?
NHibernate如何决定哪些查询应该作为批处理执行?
它似乎作为批次执行了很多单个查询 - 为什么会这样?
答案 0 :(得分:2)
当插入多个相同类型的项目时,nhibernate将根据批量大小设置批量执行此操作,这实际上很难在SQL事件探查器中检测到,因为它们看起来像是单独的RPC调用但实际上已发送到服务器在一个电话中。
查看正在批量处理的最佳方法是使用NHProf。
以下是博客文章,其中详细介绍了NHibernate中的批处理以及如何分析正在发生的事情:http://www.codinginstinct.com/2009/08/profiling-nhibernate-batching.html