SubSonic AddMany()vs foreach循环Add()

时间:2012-01-26 18:05:14

标签: performance foreach repository subsonic subsonic-simplerepository

我正在试图弄清楚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()的使用速度会明显加快吗?有没有办法计算实际复制的记录数?如果成功,我可以假设所有记录都已处理完毕吗?如果一条记录失败,整个过程是否会失败?

提前致谢。

1 个答案:

答案 0 :(得分:0)

为了澄清,AddMany()每行生成单独的查询并通过批处理提交它们; DeleteMany()生成单个查询。如果您想知道查询会发生什么,请查阅源代码和生成的SQL。

你的第一种方法很慢:2 * N次查询。但是,如果您使用批处理提交查询,则会更快。

您的第二种方法更快:N + 1次查询。您只需枚举“记录”即可找到添加的数量。

如果存在批量超出容量限制的风险,则一次提交50或100,但不会受到任何惩罚。

您的最终问题取决于交易。如果整个操作是一个事务,它将作为一个中止提交。否则,每个查询都将独立存在。你的选择。