0

我想知道SubSonics AddMany()方法是否比简单的foreach循环更快。我在SubSonic网站上探讨了一下,但在性能数据上没有看到太多内容。SubSonic AddMany()与foreach循环添加()

我现在有什么。 (.ForEach()只是有一些验证它,它,比它的工作原理就像的forEach(.....)等{做的东西})

records.ForEach(record => 
      { 
       newRepository.Add(record); 
       recordsProcessed++; 
       if (cleanUp) oldRepository.Delete<T>(record); 
      }); 

这将改变过于

newRepository.AddMany(records); 
if (cleanUp) oldRepository.DeleteMany<T>(records);  

如果您注意到使用这种方法,我会丢失多少记录,这些记录并不重要......但能够向用户显示使用此工具移动了多少记录会很好。

所以我的问题归结为:AddMany()会明显更快地使用吗?有没有什么办法可以计算实际复制的记录数?如果成功了,我可以认为所有记录都被处理了吗?如果一条记录失败,整个过程是否失败?

在此先感谢。

回答

0

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

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

第二种方法更快:N + 1查询。您可以通过枚举'记录'来查找添加了多少。

如果批量大小超出容量限制的风险,则一次提交50或100个,几乎没有任何处罚。

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