Почему версия фонового рабочего потока C # занимает вдвое больше времени, чем одна нить - PullRequest
1 голос
/ 28 ноября 2011

У меня есть надстройка C # для продукта моделирования UML, который автоматически рисует диаграммы и поддерживает их. Я обрабатываю более масштабные модели предприятия с более чем 6000 диаграммами. Это занимает много времени (даже на более быстрых машинах). Поэтому я создал версию, которая использует фоновый рабочий поток для запуска «пакетной» части задания, в то время как «передний план» имеет модальный диалог, который позволяет мне остановить обработку на ранней стадии. В противном случае, из-за пользовательского интерфейса программы моделирования, я не могу отправить сообщение «STOP» в Надстройку.

Фоновая версия, кажется, занимает в два раза больше времени, чем однопоточная версия. На самом деле, я ожидал, что версия фонового рабочего потока будет многопоточной, но, насколько мне известно, она не работает в отдельном потоке.

Модальное диалоговое окно и Надстройка взаимодействуют корректно, поэтому две части функциональности отображаются в отдельных потоках. Пакет выполняется в .RunWorkerAsync () через метод DoWork. Но если я добавлю трассировки в код, они сообщат, что они не работают в отдельных потоках (поскольку для параметра .Invoke Required задано значение false).

Я бы ожидал небольшое количество накладных расходов, но не так много (100%).

Что происходит? Должен ли я перейти к истинной многопоточности (в отличие от BackgroundWorker)?

ТИА, Paolo

1 Ответ

2 голосов
/ 28 ноября 2011

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

Прежде всего, фоновый работник не означает, что он * многопоточный ", это означает, что один поток выполняет работу в фоновом режиме вместоосновной поток пользовательского интерфейса. Если поток, который вы перемещаете в фоновом режиме, выполняет много пользовательского интерфейса, то у вас будет много переключений контекста синхронизации, которые сделают фоновый поток очень медленным.

...