Неожиданное поведение с IEnumerableC#

Место общения программистов C#
Ответить
Anonymous
 Неожиданное поведение с IEnumerable

Сообщение Anonymous »

В приведенном ниже коде я сопоставляю данные, полученные путем параллельной загрузки объектов из AzureDevOps Rest Api. Я заметил некоторые странные узкие места в моем коде при преобразовании mapDictionary в лист Excel в другом модуле кодовой базы. Создание простого цикла foreach для тысячи объектов заняло целую вечность, поскольку ссылки на словарь карт загружаются отложенно.

Код: Выделить всё

private Dictionary MapToCodeReviewRequests(
IEnumerable workItemBatchResponses,
WiqlResponse? workItemRelations)
{
Dictionary mapDictionary =
new Dictionary();
IEnumerable? codeReviewRequestIds = workItemRelations?.workItemRelations
.Where(y => y.source is not null)
.Select(x => x.source.id)
.Distinct();

foreach(int codeReviewId in codeReviewRequestIds)
{
var codeReviewResponseIds = workItemRelations?.workItemRelations
.Where(x => x.source is not null && x.source.id.Equals(codeReviewId))
.Select(x => x.target.id).ToList();

if (codeReviewResponseIds is not null && codeReviewResponseIds.Count() > 0)
{
mapDictionary[codeReviewId] = workItemBatchResponses
.SelectMany(x => x.value)
.Where(x => codeReviewResponseIds.Contains(x.fields.SystemId));
}
}

return mapDictionary;
}
Если codeReviewResponseIds представляет собой список целых чисел (как в примере), то мои данные не загружаются отложенно, и моя итерация по этим ссылкам выполняется быстро, если Я храню их без .ToList(), тогда их вычисление занимает целую вечность, почему?

Подробнее здесь: https://stackoverflow.com/questions/786 ... enumerable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»