Я унаследовал код, который делает многочисленные удаленные вызовы WMI. Когда я многократно приостанавливаю выполнение и смотрю на стек вызовов, он почти всегда находится в вызове ManagementScope.Connect()
. Кажется, что новое соединение создается с каждым WQL-запросом.Как я могу улучшить производительность WMI в .NET?
Несмотря на ограниченные пробные версии и ошибки, я еще не нашел больших выигрышей в улучшении производительности вызовов WMI.
Я пробовал кэшировать предыдущие результаты, повторно использовать соединения и избегать страшного «select *
». Они не дали мне улучшения производительности, которые мне бы хотелось. Мне интересно понять влияние среды на производительность WMI, но код должен работать в самых разных средах, которые, вероятно, не поддаются моему контролю.
Если таковые имеются, то что делать и не делать с WMI-доступом, ориентированным на производительность, в .NET?
Вы делаете несколько вызовов на одном компьютере или на многих машинах? Если последнее, вы считаете многопоточным? – serialhobbyist
На данный момент это та же машина; код предназначен для автоматической удаленной установки. Сначала код определяет, какие зависимости уже установлены, запрашивает ОС (определяя такие вещи, как архитектура процессора, системный каталог, каталог файлов программ, версия ОС и т. Д.); он делает это, чтобы настроить установку, затем использует WMI для запуска и мониторинга установки. Был запрограммирован запрос функции, чтобы они были поставлены в очередь и выполнялись параллельно (например, по 5 за раз). Хорошее предложение. – devgeezer
А-ха. Я сделал что-то очень похожее в vbscript. Моя была противной и болезненной. Я желаю вам здоровья. – serialhobbyist