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

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

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

Dim query = from t as TRANSACTION in db.TRANSACTIONs _
其中t.transactionID = transactionID _
选择

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

有帮助吗?

解决方案

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

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top