Member 13245297 Ответов: 1

Task.run создает исключение out of memory в C#


Я работаю со следующей логикой:

if (testList.Count >= 512)
{
double[] testarry = testList.Метод toArray();
Task.Run(() => SendMessage(testarry));
тест-лист.Четкий();
}
Я должен отправлять сообщение каждые 300 миллисекунд, и это занимает около 400 миллисекунд, чтобы отправить сообщение после обработки. Поэтому я решил использовать Task.Запуск, который, как я полагаю, создает новую задачу при каждом вызове. Но моя программа выдает исключение из памяти после запуска в течение нескольких часов. Кто-нибудь может мне помочь?

Что я уже пробовал:

Я думал об использовании одной задачи, но так как моя обработка занимает больше времени, я могу упустить некоторые моменты

1 Ответов

Рейтинг:
1

OriginalGriff

Если для отправки требуется 400 мс, а вы отправляете его каждые 300 мс, то не имеет значения, сколько потоков вы запускаете: у вас все равно будет точно такая же проблема, только очень немного задержанная или даже немного раньше. Подумайте об этом: как только ваш процессор исчерпает свободные ядра, потоки, которые вы запускаете, будут приостановлены в ожидании своей очереди запуска (поскольку поток или "задача" нуждается в свободном ядре для запуска).

Увеличение числа потоков, вероятно, сделает проблему хуже, а не лучше, потому что каждый поток добавляет в систему как память, так и накладные расходы на обработку.

Единственный способ предотвратить эту проблему-ускорить отправку сообщения или замедлить скорость отправки.