Как стать автором
Обновить
18
0.1
Петрухин Эдуард @epetrukhin

Пользователь

Отправить сообщение

Восемь титек, восемь ног,
Три п...ы и пара рог!

(Две доярки и корова)

Важно отметить, что CancellationToken и CancellationTokenSource реализованы как структуры (struct)

CancellationTokenSource не структура, это класс.

У меня результаты под .NET Core аналогичные Вашим, так что выкладывать не буду. А вот под .NET Framework ситуация другая:
image
В .NET Core ToArray и ToList были оптимизированы:
  • Многие linq операторы начали возвращать не голый IEnumerable, а IIListProvider, в котором есть информация о количестве элементов в последовательности. Это позволяет сразу выделять под массив/список нужное количество памяти. В Вашем бенчмарке это как раз и проявилось — Repeat точно знает, сколько элементов будет в последовательности, а Select эту информацию передаёт дальше.
  • ToArray для материализации последовательностей неизвестной длины стал использовать хитрые оптимизации. В определённый момент он переходит от использования одного промежуточного буфера с его ресайзом к списку буферов, что уменьшает memory traffic.

А в .NET Framework всё работает так как описал KvanTTT, поэтому ToList там аллоцирует меньше.

Выложите, пожалуйста, код бенчмарка, сравнивающего ToList и ToArray.

Не совсем понял вопрос. Можно пример того, что хочется получить?

Информация

В рейтинге
3 947-й
Откуда
Казань, Татарстан, Россия
Зарегистрирован
Активность