Проблема с потоками

0 голосов
спросил 19 Дек, 07 от Daddyz (340 баллов) в категории Программные продукты Esri
Имею следующую проблему...
Для работающей программы моделирования было решено использовать отдельный поток с помощью BackgroundWorker'а, чтобы пользователь мог запустив моделирование, продолжить работу с ArcMap'ом не ощущая "тормозов" и "подвисания".
Однако использовав BackgroundWorker я существенно потерял в скорости моделирования (вместо 7-10 мин оно занимает около 2 часов). Как мне кажется, проблема стоит в приоритете потоков в Windows. Итак, мой вопрос как правильно использовать BackgroundWorker и как регулировать приоритет потока?
Искренне надеюсь на помощь сведущих людей...

25 Ответы

0 голосов
ответил 07 Апр, 10 от TDenis (42,620 баллов)
Ну да, Join ждёт окончания работы потока. Но ведь в моём примере я запускаю фоновый поток, затем считаю в основном потоке и только после этого вызываю join для фонового потока. И всё успешно параллельно обсчитывается. На порядок никакого замедления нет. Почему так?
А тормозят точно ArcObjects? Профилировщиком смотрели или там кроме них больше ничего и нету? У вас процессор многоядерный? Фоновому потоку приоритет не понижаете?
0 голосов
ответил 07 Апр, 10 от -3A- (5,220 баллов)
проблема не в вычислениях в потоке
а в доступе к данным ArcGIS из дополнительного потока

собственно, код, который я привел в самом начале - это все, что нужно для получения эффекта
я из этого кода ничего не выкидывал, кроме заполнения своих внутренних данных - но это в данном случае непринципиально

то есть практически ничего делать и не надо: открыть сессию, получить курсор и просто по нему пройти через цикл for (никаких полей и читать не надо)

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

а, вот прочитал внимательно фразу: "считаю в ОСНОВНОМ потоке"
а у меня-то вся работа, которая приводит к торможению, идет в ДОПОЛНИТЕЛЬНОМ

причем тормозит именно дополнительный поток, основной работает нормально
похоже, что ArcMap как-то пытается синхронизировать доступ к данным
0 голосов
ответил 07 Апр, 10 от TDenis (42,620 баллов)
вот прочитал внимательно фразу: "считаю в ОСНОВНОМ потоке"а у меня-то вся работа, которая приводит к торможению, идет в ДОПОЛНИТЕЛЬНОМпричем тормозит именно дополнительный поток, основной работает нормальнопохоже, что ArcMap как-то пытается синхронизировать доступ к данным

Я имел в виду, что основной поток при этом не простаивает, когда в фоне что-то считается, а тоже активно работает с COM (т.е. не просто Thread.Start и тут же Thread.Join).
Исходники все ведь выложены.

Кнопку на SDE настройте, гляньте - тормозит фоновый поток или нет.
0 голосов
ответил 07 Апр, 10 от -3A- (5,220 баллов)
хм, что-то я совсем потерялся

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

получается, что зря грешил на ArcMap

вопрос снят
0 голосов
ответил 07 Апр, 10 от TDenis (42,620 баллов)
image
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...