Почему функция, используемая в итераторе, вызывается так много раз? - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь поиграться с функциями итератора.

Цель состоит в том, чтобы получить итератор всех Calculation, GetCalculations и для этого у меня есть функция GetCalculationFromSheetRowData, чтобы преобразовать необработанные данные в строго типизированный объект.

Насколько я понимаю, итераторы каким-то образом сохранят состояние функции и при каждом вызове возобновляют цикл с того места, где она остановилась.

Однако, когда я профилирую программу, я вижу 4078 обращений к итератору GetCalculations, что ожидается, поскольку список RawCalculations содержит 4078 строк, но 4 122 576 обращений к GetCalculationFromSheetRowData

Я пытался разобраться в этом количестве вызовов, но, несмотря на все мои усилия (это не 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...