2009-06-25 9 views
11

Я унаследовал код, который делает многочисленные удаленные вызовы WMI. Когда я многократно приостанавливаю выполнение и смотрю на стек вызовов, он почти всегда находится в вызове ManagementScope.Connect(). Кажется, что новое соединение создается с каждым WQL-запросом.Как я могу улучшить производительность WMI в .NET?

Несмотря на ограниченные пробные версии и ошибки, я еще не нашел больших выигрышей в улучшении производительности вызовов WMI.

Я пробовал кэшировать предыдущие результаты, повторно использовать соединения и избегать страшного «select *». Они не дали мне улучшения производительности, которые мне бы хотелось. Мне интересно понять влияние среды на производительность WMI, но код должен работать в самых разных средах, которые, вероятно, не поддаются моему контролю.

Если таковые имеются, то что делать и не делать с WMI-доступом, ориентированным на производительность, в .NET?

+0

Вы делаете несколько вызовов на одном компьютере или на многих машинах? Если последнее, вы считаете многопоточным? – serialhobbyist

+0

На данный момент это та же машина; код предназначен для автоматической удаленной установки. Сначала код определяет, какие зависимости уже установлены, запрашивает ОС (определяя такие вещи, как архитектура процессора, системный каталог, каталог файлов программ, версия ОС и т. Д.); он делает это, чтобы настроить установку, затем использует WMI для запуска и мониторинга установки. Был запрограммирован запрос функции, чтобы они были поставлены в очередь и выполнялись параллельно (например, по 5 за раз). Хорошее предложение. – devgeezer

+0

А-ха. Я сделал что-то очень похожее в vbscript. Моя была противной и болезненной. Я желаю вам здоровья. – serialhobbyist

ответ

6

не моя область знаний, но это может иметь некоторую помощь:

WMI: Improving your WMI application performance in fan-out scenario

«В этом блоге я буду говорить о трех различных способах подключения к удаленному компьютеру с помощью WMI для выполнения несколько WMI и их отличия в производительности ».

+0

Спасибо за отличный контент. В моем первоначальном сообщении указано, что я пытался «повторно использовать соединения», как указано в связанном сообщении блога. Я сделал некоторые другие эксперименты и получил значительные улучшения, которые я планирую написать для всех. Я подозреваю, что на объектах .NET есть определенные свойства, которые при установке вызывают последующие операции для повторного подключения. Я скоро напишу их. Имеет смысл, что все, что применимо к доступу WMI DCOM, вероятно, также относится и к классам .NET. Благодаря! – devgeezer

+2

@Devgeezer, как вы внесли свои улучшения в .NET? Вы написали обертку? – JSC

+0

@Devgeezer Да, я также заинтересован в ваших улучшениях WMI ... – LamonteCristo

Смежные вопросы