Я использовал memondStream.toarray () в течение 8 лет в своем приложении в HotPath после обновления моего приложения с .net 4.6.1 до .NET 8 Я понял, что он застрял после того, как я назвал эту функцию для 2 ГБ данных. Неважно, называю ли я 2000 раз для 1 МБ или 40 раз для 50 МБ потоков. Он застрял и ждет 10 секунд, чтобы выделить новый буфер. Когда я посмотрел, они изменили реализацию с C ++ на основе < /p>
Код: Выделить всё
Buffer.InternalBlockCopy(_buffer, _origin, array, 0, _length - _origin);
< /code>
to c# GC на основе библиотеки < /p>
byte[] copy = GC.AllocateUninitializedArray(count);
_buffer.AsSpan(_origin, count).CopyTo(copy);
Я предполагаю, что GC не может выделять новый массив, пока не вызовет gc.collect (); и блокирует мой поток на 10 секунд.
Есть ли у вас какие -либо предложения решить эту проблему. Я попробовал AlluckLargeObjects , конфигурации сбора мусора рабочей станции, и ни один из них не помог.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... -10-second