Просто удаление из списка тасков не решило проблемы, но немного улучшило производительность благодаря GC ( об этом я отписывал в коментариях к одному из ответов ). Дело в том, что создавая такое количество тасков в какой-то момент времени все они будут запущены параллельно (за исключением небольшого количества, которые уже отработали до момента наступления этого коллапса) и конечная производительность упадёт.
В данный момент я обкатываю более простой Parallel.ForEach и на первых запусках обработка тестового объема данных заняла вдвое меньше времени. Позже попробую еще разобраться в кастомных TaskSheduler'ах, но, кажется, это пока выше моего уровня.
Спасибо. Действительно, вы правы. Я как раз только что пришёл к аналогу вашего вывода, но в пределах моего уровня знаний. Попробую предложенные вами варианты.
И я бы, все же, отметил и ответ GavriKos т.к. эта информация оказалась для меня полезной. В нынешней структуре протестировал несколько вариантов с очисткой taskList и в т.ч. с крайне нерекомендуемым GC.Collect(); и получил небольшой, но вполне заметный прирост производительности.
Спасибо.
Прочитал обилие разного материала на эту тему и после опробовал ваш вариант. По моим наблюдениям garbage collector все равно "не справляется" если ограничиваться только удалением завершенных тасков из taskList.
То есть скорость работы приложения выросла, доходит до пиковых значений загрузки RAM дольше и в общем графике видно освобождение, но так же на определенном моменте захватывает и фактическую оперативную память и файл подкачки.
Из плюсов, разве что, когда тасков остается в районе 20% - начинает таки снижаться нагрузка до более реальных значений.
Ну и не исключаю варианта с проблемами в конкретно моей реализации обработки как таковой. Хотя "на бумаге" запуск скольугодно большого количества тасков, вроде бы, не считается проблемой - возможно нужно прикрутить механизм порционного запуска или найти как изменять настройки управляющей работой тасков системы.
О итогах изысканий буду отписывать в этой же теме.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
В данный момент я обкатываю более простой Parallel.ForEach и на первых запусках обработка тестового объема данных заняла вдвое меньше времени. Позже попробую еще разобраться в кастомных TaskSheduler'ах, но, кажется, это пока выше моего уровня.
Спасибо, почитаю.