Я работаю над запросом конкретных служб на удаленном сервере, пытаясь определить статус этих служб и запускать/останавливать/приостанавливать их соответственно.C# Итерация и сравнение/Идентификация служб WMI Эффективно
Фрагмент моего класса объекта сервера выглядит следующим образом:
public class Server
{
public ManagementClass Services { get; set; }
public List<string> TargetServices { get; set; }
}
Я делаю использование объекта ManagementClass для подключения к серверу как своего рода набор других предметов первой необходимости (Scope, ConnectionOptions и ManagementPath (. «Win32_Service») TargetedServices просто небольшой список услуг, которые я определил, которые я намерен нацеливаться всех услуг, возвращенных в моих результатах подключения пример моего TargetedService можно увидеть следующим образом:.
server.TargetedServices = new List<string>() { "ServiceA", "ServiceB" };
сейчас , моя борьба пришла в игру, когда я хочу найти из всех доступных сервисов услуги, которые я определил в своем маленьком списке .. в целях их изолирования и манипулирования ими. Я выполнил эту задачу, но обработка работает очень медленно. Я надеюсь найти умное, оптимизированное решение этого. Есть предположения?
Вот мой текущий (передергивает) логика:
public void PingServices(List<Server> servers)
{
foreach(Server server in servers)
{
foreach(ManagementObject service in server.Services.GetInstances())
{
foreach(string target in server.TargetServices)
{
if(service.GetPropertyValue("Name").ToString() == target)
{
service.InvokeMethod("StartService", null);
}
}
}
}
}
Вы можете скрыть имена служб, если найдете их на каждом сервере. Затем, когда вы найдете их все, вы можете немедленно остановиться и перейти на следующий сервер? Вы можете запускать несколько потоков. Вам нужно прокомментировать и выяснить, что происходит медленно. – user2509738
Согласен, что несколько потоков могут помочь процессу для нескольких серверов. Однако этот процесс является неприемлемо медленным только для одного сервера. Я просмотрел инструкции LINQ, которые могут объединить два списка вместе. Однако я не могу объединить и таким образом, чтобы сохранить .InvokeMethod() –
scniro