Dzień dobry.
Mam napisany mały programik, z którego w pewnym momencie uruchamiam inny program ERP i przekazuję pewne dane.
Zanim uruchomię ERP muszę sprawdzić czy już taki proces dla użytkownika istnieje. Mam kod który sprawdza czy proces jest uruchomiony i jaki użytkownik go uruchomił (poniżej).
string value= "";
Process[] allProc = Process.GetProcessesByName("ERP"); //Nazwa procesu
foreach (Process singleProc in allProc)
{
ObjectQuery query = new ObjectQuery("Select * From Win32_Process where ProcessId='" + singleProc.Id + "'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
string processOwner = "";
foreach (ManagementObject prc in searcher.Get())
{
string[] arg = new string[2];
prc.InvokeMethod("GetOwner", (object[])arg);
processOwner = arg[1].ToString() + "\\"+arg[0].ToString();
break;
}
value += "ID: " + singleProc.Id + ", P: "+singleProc.ProcessName+", U: " + processOwner+ "\n";
}
MessageBox.Show(value);
Program działa na serwerze Win2016 zatem mamy tu max 30 użytkowników a co za tym idzie 30 procesów.
Gdy procesów ERP jest niewiele np 1-3 program działa to szybko, ale im więcej użytkowników odpali ERP tym dłużej trwa sprawdzanie procesów.
EDIT: Już przy 10 użytkownikach/procesach czas sprawdzania to 20 sek., a przy 28 rośnie do 1m 15 sek.
Czy jest jakiś sposób, żeby zoptymalizować ten kawałek kodu, tak żeby wykonywał się w miarę szybko dla wielu procesów ?