我最近意识到了LazyList的概念,我想在我的工作中实现这个概念。
我有几个方法可以从数据库中检索数十万个条目,我想返回LazyList<T>
而不是典型的List<T>
。
我只能找到Lazy<List<T>>
,就我的理解而言,这是不一样的。 Lazy<List<T>>
使列表的初始化变得懒惰,这不是我需要的。
我想举一个Scheme语言的例子,如果有人曾经使用它。
基本上它由LinkedNodes
实现,需要计算给定节点的值,node.next
实际上是一个需要计算以检索值的函数。
我想知道如何实际控制大小为400k左右的列表,听起来如此昂贵,以一对MB的大小保存一个可能可以获得GB的List取决于程序需要的db操作要做。
我目前正在使用.Net 4.5,C#版本是4
答案 0 :(得分:4)
为什么不回报结果,而不是返回List<T>
或LazyList
?这比检索所有行要好得多。它将逐行流式传输。更适合内存管理。
例如:(PSEUDO)
private IEnumerator<Row> GetRows(SqlConnection connection)
{
var resultSet = connection.ExecuteQuery(.....);
resultSet.Open();
try
{
while(resultSet.FetchNext())
{
// read one row..
yield return row;
}
}
finally
{
resultSet.Close();
}
}
foreach(var row in GetRows(connection))
{
// handle the row.
}
这样每个结果集都会被处理掉。