VB.NET; Можно ли дополнительно оптимизировать этот запрос WMI?

Итак, мое приложение выполняет итерацию по системным службам и получает о них различную информацию. Одним из них является PID, для получения которого я использую следующий код (добавьте одну кнопку и ссылку на System.Management):

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim myStopWatch As New Stopwatch
    myStopWatch.Start()

    Dim processId As UInteger = 0
    Dim strService As String = "BITS"
    Dim qry As String = "SELECT PROCESSID FROM WIN32_SERVICE WHERE NAME = '" & strService & "'"
    Dim searcher As System.Management.ManagementObjectSearcher = New System.Management.ManagementObjectSearcher(qry)

    For Each mngntObj As System.Management.ManagementObject In searcher.[Get]()
        processId = CUInt(mngntObj("PROCESSID"))
    Next

    myStopWatch.Stop()
    MessageBox.Show("ID: " & processId.ToString & vbNewLine & myStopWatch.ElapsedMilliseconds.ToString)
End Sub

Теперь у меня это как собственная функция в моем основном приложении, а не на кнопке (только для целей тестирования).

Все это работает, и я могу пройти через службы все нормально. Мне просто любопытно, можно ли это еще оптимизировать? Для получения PID требуется около 17-20 мс, но в зависимости от того, сколько сервисов запущено, может сложиться до пары секунд.

Мне любопытно, можно ли как-нибудь оптимизировать этот запрос? Спасибо.

Кому интересно, я получил этот бит кода из этого сообщения msdn.

Нет, если вы не убедите MS улучшить производительность WMI. Ваш код не содержит ничего, что можно было бы оптимизировать, потому что его производительность полностью зависит от скорости работы WMI.

Ken White 26.05.2018 05:09

@ Кен Уайт: Спасибо, это все, что мне нужно было знать. Новичок в WMI, поэтому не был уверен, что еще можно было сделать.

TimothyC 26.05.2018 05:51

Вы можете попробовать использовать функции API службы, как описано в ответе на: Как мы можем найти идентификатор процесса работающей службы Windows?.

TnTinMn 26.05.2018 06:30

@TnTinMn: Спасибо за подсказку!

TimothyC 26.05.2018 07:38

1. В обычных сценариях вы должны обеспечить выход из цикла, чтобы избежать повторения более одного элемента (например, нескольких экземпляров программ). 2. Существуют некоторые свойства класса System.Management.EnumerationOptions, которые можно настроить, чтобы попытаться оптимизировать время выполнения запроса WMI: ReturnImmediately = True; Rewindable = False; DirectRead = True и EnumerateDeep = False; вы можете передать его конструктору ManagementObjectSearcher.

ElektroStudios 26.05.2018 10:17

Это время, о котором вы сообщаете, очень велико. Запрос о состоянии всех служб не должен занимать более 200–300 миллисекунд на локальном компьютере. Как сказал @ElektroStudios, вы, вероятно, захотите пропустить глубокое перечисление и запросить зависимости суперкласса службы в последующем запросе (как это делает Консоль управления). Другое дело, если запрос выполняется на удаленном компьютере.

Jimi 26.05.2018 13:27

@ElektroStudios: Спасибо! Я не знал, что эти варианты существуют, но все еще учился, как их обойти.

TimothyC 26.05.2018 23:44

@Jimi Вау, не знал, что это должно быть так быстро. Да, я постараюсь это изменить. Спасибо!

TimothyC 26.05.2018 23:46

См .: System.Management.EnumerationOptions, System.Management.Scope и System.Management.ConnectionOptions. Если возникнут проблемы, оставьте комментарий.

Jimi 26.05.2018 23:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
109
0

Другие вопросы по теме