我正在试图弄清楚SubSonics AddMany()方法是否比简单的foreach循环更快。我在SubSonic网站上捅了一下,但对性能统计数据的看法并不多。
我现在有什么。 (.ForEach()只是对它进行了一些验证,除了它就像forEach(.....){do stuff})
records.ForEach(record =>
{
newRepository.Add(record);
recordsProcessed++;
if (cleanUp) oldRepository.Delete<T>(record);
});
哪个也会改变
newRepository.AddMany(records);
if (cleanUp) oldRepository.DeleteMany<T>(records);
如果您注意到这种方法,我会丢失我处理的记录数量并不重要...但是能够向用户显示使用此工具移动了多少记录会很好
所以我的问题归结为:AddMany()的使用速度会明显加快吗?有没有办法计算实际复制的记录数?如果成功,我可以假设所有记录都已处理完毕吗?如果一条记录失败,整个过程是否会失败?
提前致谢。
答案 0 :(得分:0)
为了澄清,AddMany()每行生成单独的查询并通过批处理提交它们; DeleteMany()生成单个查询。如果您想知道查询会发生什么,请查阅源代码和生成的SQL。
你的第一种方法很慢:2 * N次查询。但是,如果您使用批处理提交查询,则会更快。
您的第二种方法更快:N + 1次查询。您只需枚举“记录”即可找到添加的数量。
如果存在批量超出容量限制的风险,则一次提交50或100,但不会受到任何惩罚。
您的最终问题取决于交易。如果整个操作是一个事务,它将作为一个中止提交。否则,每个查询都将独立存在。你的选择。