Mar*_*ark 4 datacontext linq-to-sql
如果你能......请提供建议
我的项目基于Linq-To-SQL,而(几乎)完成的应用程序的性能非常差.我已多次启动SQL事件探查器以使用LoadOptions优化查询以减少到数据库服务器的往返次数,但在一天结束时,我的共同点被编织成以下几点:
微软官方建议是,在DataContext应该不会有很长的寿命-那就是-他们建议你创建一个DataContext,兑现对象,进行更改,调用的SubmitChanges(),然后处理.我的申请虔诚地遵循这种模式.
DataContext往往对它的实体非常紧贴,并且在更改跟踪和重新附加对象的延迟关系加载时,已经证明将对象从一个上下文分离和重新附加(未更改)对象变得有问题.因此,保持加载的对象缓存已被证明是有问题的.
在DataContext上设置LoadOptions以加载多层关系时,性能会受到影响,因为结果数据是相关行的乘积,而不是它们的总和.我正在从字面上提取数据的特定模式导致在设置LoadOptions时返回的数据量增加144倍,因此自然这最终成为性能杀手,而不是帮助者.
如果没有设置LoadOptions(或者甚至在设置为降低级别时),DataContext会对数据库进行数百次往返.
我还注意到,DataContext忽略了第一次通过关系访问对象时已经加载了一个对象...例如:
Dim allCustomers as Customers() = Context.Customers.ToArray()
Dim allOrders as Orders() = Context.Orders.ToArray()
For Each o as Order in allOrders
Console.WriteLine(o.Customer.Name) ' <- Triggers round-trips to database!!!
Next
Run Code Online (Sandbox Code Playgroud)
总之,我遇到的问题是我所获得的性能对我的客户来说是不可接受的,并且:
我真的觉得我在这里错过了一些基本的东西,也许是我采用的整体设计模式,并且非常感谢您在没有所有往返的情况下从DataContext中获取加载的Object-Graph所需的任何建议.或臃肿的网络流量.
你的建议?
归档时间: |
|
查看次数: |
3206 次 |
最近记录: |