Комментарии 2
Попытался использовать у себя в проекте, но получилось неприятно.
using var list = PooledList<T>.Create(75);
var cToken = new ColdToken();
list.ToList(cToken);
Выбросит исключение: System.InvalidOperationException: "ColdToken is required for materialization.". Выбрасывается оно, т.к. в ColdToken нужно передать nonce != 0, но конструктор internal, поэтому сделать это невозможно. Без ColdToken невозможно вызвать .Tolist().
Попытка не пытка, но жалко потратить час для адаптации в коде, а теперь вырезать пол часа обратно.
PS документации нет, кроме как эта статья
Спасибо за отзыв. Для материализации нужно использовать ColdToken, который создаётся через Cold.Enter():
using var cold = Cold.Enter();
var result = list.ToList(cold.Token);Изначально это было сделано намеренно, чтобы операции, гарантированно выделяющие память (ToList(), ToArray() и т.п.), были явно отделены от горячего кода, где библиотека старается избегать лишних аллокаций и GC-пауз. Согласен, что без документации этот механизм выглядит неочевидно, поэтому в следующих версиях будет добавлено более подробное описание концепции Cold/Hot API и улучшены сообщения об ошибках.

Убейте GC-спайки в играх и сервисах: коллекции без аллокаций на .NET