@armadillo-cld

Как правильно сделать многопоточность что бы программа не зависала?

Всем привет! Как сделать правильно многопоточность, что бы программа не зависала? Я делал списокList<Thread> threads = new List<threads>(); туда помещал потоки, а потом по кнопке их всех останавливал проходясь циклом по ним threads[i].Abort(). Функция потоков выглядела так:

void foo(object obj) {
   while(true) {
       FooStruct fs = (FooStruct)obj;
       AddLog(fs.arg1);
       AddLog(fs.arg2);
       AddLog(fs.arg3;
  }
}

Эта функция выводит текст в richtextbox. Но когда юзер запускает очень много таких потоков (штук по 1к), то программа зависает намертво. Как сделать что бы сколько не запускай - программа их отрабатывала? Спасибо всем! Если что, это мне нужно для парсера сайтов, в аргументы передаются url сайтов, но я привёл пример немного легче.

UPD: Пробывал делать Thread.Sleep. Тоже саммое
  • Вопрос задан
  • 206 просмотров
Пригласить эксперта
Ответы на вопрос 4
freeExec
@freeExec
Участник OpenStreetMap
Потоков надо запускать на 1к, а чуть меньше чем ядер в системе, чтобы система не вставала колом от 100% загрузки ядер. Например для 8 ядер оптимально будет 6 поток, тогда пользователь вообще не заметит нагрузку, кроме жужжания вентилятора.
Ответ написан
petermzg
@petermzg
Самый лучший программист
UI поток должен быть один и только он отвечает за обновления контролов таких как richtextbox.
Базовые/стандартные контролы как правило имеют проверку на вызов их методов из UI потока и эта проверка выкинет exception.

По этой причине вы должны применять механизмы синхронизации, которые позволят вам обращаться к контролам из UI потока.

PS: Используйте обьекты синхронизации такие как Event, чтобы потоки нормально завершались, а не прерывались через Abort()
Ответ написан
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
Почитайте про то как правильно использовать TPL (Task Parallel Library) и пул потоков. Не используйте чистый Thread пока не поймете как устроены потоки.
Ответ написан
Комментировать
@itgood
прочти про асинхронность
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы