.Net 8 memoreStream.toarray () застрял на 10 секундC#

Место общения программистов C#
Ответить
Anonymous
 .Net 8 memoreStream.toarray () застрял на 10 секунд

Сообщение Anonymous »

Я использовал 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
Ответить

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

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

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

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

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