LINQ与数据集 - 性能上升?

时间:2009-11-26 05:02:55

标签: vb.net performance linq-to-sql dataset

我正在重构现有的VB.NET应用程序以使用Linq。我已经能够成功地使用它,但它在客户端机器上需要很长时间(超过一分钟)!

它们在数据库表中有很多行,但同一台机器上的旧版本程序(使用数据集)需要5秒钟。

我的Linq查询非常标准,如下所示:

Dim query = From t As TRANSACTION In db.TRANSACTIONs _
where t.transactionID = transactionID _
select t

他们只返回一行或零行。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我对巨大的时差(5秒到60秒以上)感到惊讶。我想这将取决于TRANSACTION实体的复杂程度。 LINQ to SQL将处理结果集中的每一行并将其转换为对象,然后将一些状态跟踪信息添加到DataContext。 DataSet只是简单地存储数据raw,并在从DataTable读取数据时将其处理为强类型数据。我不希望L2S成本增加12倍,但我预计会增加一些。

答案 1 :(得分:2)

您粘贴的代码实际上根本不会访问数据库 - 您接下来使用'query'执行的操作将决定最终将多少数据传输到客户端。你以后做的事情是否可能导致LINQ版本下载的数据超过数据集版本?

我在一个项目上做了相同的转换,只看到LINQ的等效或更好的性能,但是有一些情况下LINQ版本正在向服务器进行更多的往返,例如执行Count(),然后获取数据作为两个单独的服务器查询。我通常通过执行.ToList()来解决这个问题,以便在处理之前在本地获取数据。您有时必须使用SQL事件探查器来了解幕后发生的事情。