这个问题是在我们针对每个更新实体一个SubmitChanges()而不是整个批次的SubmitChanges()进行一些性能测试时出现的。结果如下:
插入3000个项目在一个SubmitChanges()调用中...持续时间:1318毫秒
插入3000个项目在一个SubmitChanges()调用中,在transactionscope内部...持续时间:1280毫秒
将3000个项目插入单独的SubmitChanges()调用...持续时间:4377毫秒
将3000个项目插入单独的SubmitChanges()调用中,使用事务...持续时间:2901毫秒
请注意,当为每个更改的实体执行单独的SubmitChanges()时,将所有内容放在事务内会提高性能,这对我们来说是非常意外的。在SQL服务器分析器中,我们可以看到在事务内部的单独的SubmitChanges()调用不会为每个调用重置DB连接,与没有事务的情况相反。
在什么情况下,数据上下文会保持连接处于打开状态?是否有关于linq-to-sql如何处理连接的详细文档可用?