许多条目的C#LazyList

时间:2016-06-16 07:57:27

标签: c# lazy-evaluation

我最近意识到了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

1 个答案:

答案 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.

}

这样每个结果集都会被处理掉。