![]() |
|
Модераторы: gambit |
![]()
|
|
| andDavid |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 12.2.2010 Репутация: нет Всего: нет |
Есть домен с 2000+ машинами. Мне надо просканировать все эти машини и извлечь из локальной группы администраторов на каждой машине все аккаунты, узнать, какие пользователи отключены(Disable), и иметь возможность включать(Enable) и удалять пользователей(Remove) из этой группы. Сканирование компьютеров я деляю с помощью WMI, а операции - с помощью namespace System.DirectoryServices (почему-то сканирование компьютеров с помощью класса DirectoryEntry не работает у работодателя). Так вот, все компьютеры сканируются успешно, и показывается результат отлично, и операции все работают ))). НО...операция сканирования происходит очень медленно, так как я делаю это одним потоком (использую BackgroundWorker). ВОПРОС: как можно увеличить скорость сканирования компьютеров?
Понятное дело, что нужно создавать несколько потоков. Однако, моя идея создания N потоков на M компьютеров, так, чтобы каждый поток сканировал всего небольшое количество компьютеров, кажется неправильной. (Наример: всего в домене 2500 компьютеров. Создаю 100 потоков, и каждый из них будет сканировать 25 машин). Буду очень признателен за предложенные решения данной проблемы. Это сообщение отредактировал(а) andDavid - 1.11.2011, 01:49 |
|||
|
||||
| andDavid |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 12.2.2010 Репутация: нет Всего: нет |
Сделал, как написал. Скорость увеличилась. Но все поток завершаюстся медленно, так как они не могут завершиться быстро из-за того, что каждый поток коннектится к удалленой машине. А я его не могу прервать.
|
|||
|
||||
| andDavid |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 12.2.2010 Репутация: нет Всего: нет |
А может лучше использовать ThreadPool ? Хотя, у меня поток только получает необходимую инфо. из другого компьютера и тут же закрывается. Но получается тяжеловестно создавать каждый поток собственноручно. Может кто подскажет?
Сейчас использую вот этот код:
|
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 3 Всего: 36 |
вполне можно использовать ThreadPool, с ним тебе вообще не придётся задумываться о количестве потоков - просто зашедуль все компы сразу, а рантайм сам разберётся, сколько реальных потоков создать и как их использовать
твой текущий вариант плох тем, что если все самые "медленные" компы попадут в один из потоков, то остальные завершатся раньше и не будут использоваться для ещё необработанных компов есть ещё вариант организовать нечто вроде своего пула потоков:
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |