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

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

Сообщение Anonymous »

Я использовал MemonedStream.toarray () в течение 8 лет в своем приложении в HotPath, после обновления моего приложения с .netFramework4.6.1 до .net8 Я понял, что оно застряло после того, как я позвоню этой функции для 2 ГБ данных. Неважно, называю ли я 2000 раз для 1 МБ или 40 раз для 50 МБ потоков. Он застрял и ждет 10 секунд, чтобы выделить новый буфер. Когда я посмотрел, они изменили реализацию с C ++ на основе < /p>
buffer.internalblockcopy(_Buffer, _origin, массив, 0, _length - _origin); < /p>
до библиотеки C# GC < /p>
byte [] copy = gc.allocateuninitializedArray (count);
_buffer.asspan(_origin, count) .copyto (copy); < /p >
Я предполагаю, что GC не может выделять новый массив, пока он не вызовет gc.collect (); И он блокирует мой поток на 10 секунд. Я попробовал разрешить allargeObjects, конфигурации сбора мусора рабочей станции, и ни один из них не помог.


Подробнее здесь: https://stackoverflow.com/questions/793 ... -10-second
Ответить

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

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

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

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

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