0

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

提前致谢。

4

1 回答 1

0

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

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

您的第二种方法更快:N+1 个查询。您可以通过枚举“记录”找到将添加的数量。

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

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

于 2012-02-04T00:17:27.603 回答