1

InsertOnSubmit在打电话之前我应该​​打电话给多少人SubmitChanges?我正在从 Web 服务添加数据,该服务一次可以返回数万条记录。Web 服务周围的包装类将记录公开为一个IEnumberable集合,以隐藏复杂的分块机制。

是否有关于在提交之前我应该​​累积多少插入的指南?

4

4 回答 4

3

好吧,我一口气完成了跨多个表的数十万条记录,没有任何问题。事实上,虽然在这种情况下为每个 InsertOnSubmit() 调用 SubmitChanges() 需要几个小时,但在最后调用 SubmitChanges() 可以将插入这么多记录的时间减少到几分钟。

在我上面描述的情况下,我的安排是用于带有标题表、详细信息表(链接到标题)和原子表(链接到详细信息)的报告表。对于每个标题记录,我有多个详细表,然后将再次由多个原子记录链接。在某些情况下,我最终会插入大量记录,并且最后一次调用 SubmitChanges() 时它们都不会出现任何问题,而且它们都表现得非常好。

于 2010-07-01T01:58:43.200 回答
3

它还取决于您需要插入的数据类型。有时我需要插入很多记录,我还需要ID,以便在另一个表中插入更多记录。

因为当您向数据库提交更改时会分配 ID,所以我需要在特定时间调用 SubmitChanges。

当不需要时,我只需一次提交 1000 个左右(取决于我需要插入的记录总数)。

也许你可以做一些最适合你的速度测试。取决于硬件、对记录数量的期望等。

于 2010-07-01T10:07:09.763 回答
3

对于批量更改 1000 条记录的一个字段而不是一次更改 1 条记录:一次 1 条记录需要 0.1989 秒/记录,而批处理需要 0.0711 秒/记录。所以在我的测试中,Batch 的速度大约是 3 倍。请注意,批量大小的效率各不相同。

submitchanges() 一次 1
条记录 记录秒 秒/记录
1000 198.95 0.1989

批量子事件()
记录秒钟秒/纪录百分比
100 12.20 0.1220 133%
200 18.33 0.0916 122%
500 37.59 0.0752 106%
1,000 71.07 0.0711 103%
2,000 138.64 0.0693 102%
10,000 680.36 0.0680

于 2013-08-12T18:09:55.350 回答
1

每个人说真的没有任何“指南”。我会说为了提高效率,你想收集一堆,也许不是 10k,而是说 100?这将大大减少您的数据库查询,并且在您建立事务时不应该在本地缓存它们过多的内存。

您可能应该使用几个不同的值进行测试并分析性能(内存和速度)以找到适合您硬件的最佳解决方案。

于 2010-07-01T00:03:48.800 回答