| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Как быстро получить количество запущенных процессов?

Как быстро получить количество запущенных процессов?

Ответ
Поиск в этой теме
Непрочитано 24.05.2021, 16:52 #1
Как быстро получить количество запущенных процессов?
doctorraz
 
электрик
 
Волгоград
Регистрация: 19.02.2010
Сообщений: 2,293

Когда я писал на VB6, то для получения списка запущенных процессов (по маске) использовал такой код
Код:
[Выделить все]
 Dim iКАДзапущено As Short
 Dim strComputer As String = "."
            Dim objWMIService As Object = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
            Dim colProcesses As Object = objWMIService.ExecQuery("Select * from Win32_Process Where Name like " & "'%" & "nCad" & "%'")
            iКАДзапущено = colProcesses.Count
но это работает очень медленно
на VB.NET
я получаю список процессов и перебираю их в цикле
Код:
[Выделить все]
 Dim currentProcess As Object = Process.GetProcesses
            Dim proName As String
            Dim iКАДзапущено As Short
            For Each currentprocesses As Process In Process.GetProcesses
                proName = currentprocesses.ProcessName
                If proName Like "*nCad*" Then
                    iКАДзапущено += 1
                End If
            Next
этот код работает значительно быстрее, чем WMI
Собственно вопрос, можно ли как-то уйти от цикла (возможно будет быстрее?)
и получить объекты по маске имени процесса, например запрос LINQ из GetProcessesByName Where .... или еще как?
__________________
Мастерская СПДС
Просмотров: 5086
 
Непрочитано 24.05.2021, 20:11
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от doctorraz Посмотреть сообщение
например запрос LINQ
Вы ради интереса посмотрите во что компилируется вот этот самый LINQ запрос... и чем Вам цикл не угодил?
Boxa вне форума  
 
Автор темы   Непрочитано 24.05.2021, 20:14
#3
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Boxa Посмотреть сообщение
и чем Вам цикл не угодил?
угодил, на домашней машине на два порядка быстрее от WMI работает..
но цикл это как бэ в лоб, думал может поэлегантнее и еще шустрее решение есть

----- добавлено через ~55 мин. -----
ну и вдогон хотелось бы определить какой юзер этот процесс запустил..
не решено в лоб
Dim strUserr = currentproces.StartInfo.EnvironmentVariables("USERNAME")
upd не работает(((
----------------------
Пытаюсь писать на дотнет, но у мну СОМ диалект и вебеашный акцент))))
==========
UPD
попробовал так
Код:
[Выделить все]
 Dim selectQuery As Management.SelectQuery = New Management.SelectQuery("Select * from Win32_Process Where Name like " & "'%" & "nCad" & "%'" & "or Name like " & "'%" & "acad" & "%'")
            Dim searcher As Management.ManagementObjectSearcher = New Management.ManagementObjectSearcher(selectQuery)
            Dim Объекты As Management.ManagementObjectCollection = searcher.Get
Dim iКАДзапущено As Short= Объекты.Count
работает еще медленнее WMI, но бонусом можно сразу проверить какой юзер запустил процесс..
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 25.05.2021 в 21:24.
doctorraz вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Как быстро получить количество запущенных процессов?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить цифровую модель комнаты из dwg gizmo_zx Программирование 12 30.11.2019 14:32
Как быстро получить сумму длин или площадей? Valuens AutoCAD 8 30.04.2017 17:03
Быстро получить Набор объектов попадающих в Сферу [N.S] Программирование 10 09.08.2009 11:04
Как быстро подсчитать количество рабочей и конструктивной ар ktstar Разное 6 16.08.2007 11:06