在对象集合上进行延迟加载

时间:2009-03-06 10:28:23

标签: vb.net loading

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

分页可能是您最好的解决方案。如果您使用的是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有一个example,它非常有助于演示SQL。

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