我们有一个使用NHibernate和Castle ActiveRecord的服务器/单个数据库应用程序,SQL Server就在它后面。
作为处理的一部分,我需要编写多达120万行数据。使用ActiveRecord和NHibernate非常慢,需要改进 - 这可以通过“插入... select .. from ..”来完成,可能在存储过程中。
阻止我的是ID代。我们使用HiLo代。如果我编写存储过程来执行我需要的操作,我可以从数据库表中获取下一个要使用的数字,执行插入操作然后更新表。问题是我不知道:
NHibernate已经缓存了多少个数字 NHibernate正在做的其他操作
我能做的最好(我认为)是当我从存储过程返回时要求NHibernate刷新其缓存的数字 - 或者返回从存储过程中使用的最后一个ID并更新HiLo缓存,但我不能找到任何参考这样做。
有什么想法吗?
答案 0 :(得分:1)
如果还没有,请查看使用StateLessSession并设置批量大小。这两项都将大大加快批量数据处理速度。
http://davybrion.com/blog/2008/10/bulk-data-operations-with-nhibernates-stateless-sessions/