Почему eNemerable рекомендуется дата данных для итерационных списков, когда индексация значительно медленнее, чем обычныC#

Место общения программистов C#
Ответить
Anonymous
 Почему eNemerable рекомендуется дата данных для итерационных списков, когда индексация значительно медленнее, чем обычны

Сообщение Anonymous »

Я изучал C# уже пару месяцев (новая работа). Я провел тест на сырую скорость на некоторых схемах зацикля и что -то привлекло мое внимание. < /P>

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

int[] myArr = new int[] { 11, 12, 13, 14, 6, 22, 45, 13 };
IEnumerable myEnum = myArr;

DateTime start = DateTime.Now;
int enumSum = myEnum.Sum();
Console.WriteLine("time using IEnum.Sum(): " + (DateTime.Now - start).TotalSeconds);
Console.WriteLine("using IEnum.Sum(): " + enumSum);
< /code>
В среднем, петли White and Foreach работают намного лучше, чем их аналоги (когда я манипулирую массивом напрямую). < /p>
while (idx < myArr.Length)
{
total += myArr[idx];
idx++;
}
Console.WriteLine("time using while loop: " + (DateTime.Now - start).TotalSeconds);
Console.WriteLine("using while loop: " + total);
< /code>
Однако, поскольку нельзя ссылаться на индексы, я пытался использовать метод elementat (), и разница была невероятной. < /p>
while (idx < myEnum.Count())
{
total += myEnum.ElementAt(idx);
idx++;
}
Console.WriteLine("time using while loop: " + (DateTime.Now - start).TotalSeconds);
Console.WriteLine("using while loop: " + total);
Использование Supressin ienumerable.sum (): время с использованием ienum.sum (): 0.005396
Проверка массива напрямую: Использование, в то время как петля: 4E-07
gloping: 4e-07
while: 4E-07
0.0011301

Я понимаю, что ienumerable имеет метод toarray (), но на самом деле хочу понять, почему Ienumerable является предпочтительным способом представления итерационных данных/списков в c#, если это значительно более медленное, чтобы итерация/цикл, чем другие типы.

Подробнее здесь: https://stackoverflow.com/questions/773 ... ndexing-is
Ответить

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

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

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

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

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