linq-to-sql datacontext如何使数据库连接保持打开状态?Linq-to-sql上下文数据库连接处理
当我们对每个更新实体的一个SubmitChanges()
而不是一个SubmitChanges()
对整个批次实体的性能进行了一些测试时,问题出现了。结果:
插入一个的SubmitChanges 3000项()调用...时间:1318ms
插入3000个项目中一个的SubmitChanges()调用,内 的TransactionScope ...时间:1280ms
在个别的SubmitChanges插入3000个项目()调用...时间: 4377ms
插入个别的SubmitChanges 3000个项目()一 交易...时间内电话:2901ms
请注意,每个改变实体做个人SubmitChanges()
时,把一个交易内的所有改进性能,这是相当意外给我们。在sql server分析器中,我们可以看到事务中的个人SubmitChanges()
调用不会为每个调用重置数据库连接,而不是没有事务的调用。
数据上下文在什么情况下保持连接打开?有没有关于linq-to-sql如何处理连接的详细文档?
DataContext确实跟踪已更改的对象,但在默认生成的代码中(通过本例中的dbml设计器),它使用INotifyPropertyChanging和INotifyPropertyChanged。通过这些实现,不需要遍历所有对象。无论如何你是对的,跟踪的实体数量增长很大。 –