为什么在迭代器中使用的函数调用了这么多次?

时间:2018-08-31 09:45:09

标签: c# performance iterator

我正在尝试使用迭代器功能。

目标是要获得所有CalculationGetCalculations的迭代器,并且要这样做,我有一个函数GetCalculationFromSheetRowData,可以将原始数据转换为强类型的对象。

据我了解,迭代器将以某种方式存储函数的状态,并在每次调用时从中断处恢复循环。

但是,当我对程序进行概要分析时,我会看到对迭代器GetCalculations的4078次调用,这是预期的,因为RawCalculations列表有4078行,但是对GetCalculationFromSheetRowData的4 122 576次调用

我一直试图弄清楚这个电话的数量,但是尽管我做了最大的努力(不是4078平方,它不是从1到4078的整数之和,等等),但是我仍然无法理解危险的过程在这里。

能否请您帮助我了解发生了什么事情,以便我可以尝试解决它?

//The raw data is populated by an other mecanism.
private IList<IList<object>> RawCalculations { get; }

public IEnumerable<Calculation> GetCalculations()
{
    foreach (var row in RawCalculations)
    {
        if (row.Count == 0)
            continue;
        yield return GetCalculationFromSheetRowData(row);
    }
}

private Calculation GetCalculationFromSheetRowData(IList<object> row)
{
    //Takes raw data, as IList<object> and returns a strongly-typed Calculation object
}

0 个答案:

没有答案