我有一个SQL查询,可以通过DataReader带回大量的行。刚才我查询DB将结果集转换为List(of),数据将Grid绑定到List。

由于数据集的大小,偶尔会导致超时。

我目前有三个teir设置,其中UI作用于业务层中的对象列表。

有人能建议在这个场景中实现延迟加载的最佳方法吗?还是有其他方式干净地实现这个?

我目前正在使用Visual Studio 2005,.NET 2.0

编辑:在这种情况下如何使用分页?

有帮助吗?

解决方案

LINQ to SQL似乎在您的情况下有意义。

否则,如果出于任何原因,您不想使用LINQ to SQL(例如,您使用的是.NET 2.0),请考虑编写一个读取 DataReader 的迭代器并将其转换为适当的对象:

IEnumerator<MyObject> ReadDataReader() {
  while(reader.MoveNext())
    yield return FetchObject(reader);
}

其他提示

您是否需要立即恢复所有数据?你可以考虑分页。

分页可能是您最好的解决方案。如果您使用的是SQL Server 2005或更高版本,则会添加新功能。 ROWNUMBER()

WITH MyThings AS
(
    SELECT ThingID, DateEntered,
    ROW_NUMBER() OVER (ORDER BY DateEntered) AS 'RowNumber'
    FROM dbo.Things 
) 
SELECT * 
FROM ThingDetails
WHERE RowNumber BETWEEN 50 AND 60;

有一个示例 David Hayden在演示SQL方面非常有帮助。

此方法会减少返回的记录数,从而减少总体加载时间。它确实意味着你需要做更多的事情来跟踪你在记录序列中的位置,但是值得努力。
标准分页技术要求所有内容都从数据库返回,然后在中间层或客户端层(代码隐藏)进行过滤,此方法将记录减少到更易于管理的子集。

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