NePo
Gruodis 13, 2006

Process vs WMI

Ne taip jau seniai aš parodžiau netgi du būdus, kaip susikurti programas panašias į Task Manager: Kuriam savo Task Manager ir Pažintis su WMI. Kiekvienas iš šių metodų turi savų privalumų ir trūkumų, norit sužinoti kuris geresnis, jums teks patiems pasinagrinėti kodą ir nuspręsti, o aš norėčiau aptarti laiko aspektą.

Process class

Pirmu atveju testuosim tokį kodą:

Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
dataGridView1.Rows.Add(process.Id, process.ProcessName, process.BasePriority);
}

Gauti rezultatai:
1) 0,0639653922495736
2) 0,0195723199456914
3) 0,0378056428959547

Vieną kartą pateikiant visą procesų sąrašą nereikia sugaišti nei sekundės, tačiau generavimo laikas pasiskirstęs sąlyginiai dideliame laiko intervale.

WMI

Antru atveju testuosime tokį kodą:

query = new ManagementObjectSearcher("Select * from Win32_Process ");
queryCollection = query.Get();
foreach (ManagementObject mo in queryCollection)
{
string parentid, processid, user, name;
parentid = mo["ParentProcessId"].ToString();
processid = mo["ProcessId"].ToString();
name = mo["Name"].ToString();
try
{
string[] o = new String[2];
mo.InvokeMethod("GetOwner", (object[])o);
user = o[0].ToString();
}
catch
{
user = "";
}
dataGridView1.Rows.Add(processid, name, user, parentid);
}

Kodas šiuo atveju gerokai sudėtingesnis, naudojamas kitas ciklas nei pirmuoju atveju ir visa tai gali įtakoti vienaip ar kitaip laiką. Dėl tos pačios priežasties jūs galite pareikšti, jog testai neteisingi, tačiau abu kodai duodą tokį patį/panašų rezultatą, todėl toks lyginimas vis tik yra prasmingas.

Gauti rezultatai:
1) 1,16508634477287
2) 1,27872173698054
3) 1,19771591082107

Kaip matome, rezultatai nėra pasiskirstę tokiame plačiame diapazone, tačiau užtrunkama gerokai ilgiau. Jūs galite pasakyti, jog pirmu atveju į dataGridView būdavo paduodami tik trys laukai, o dabar keturi, tačiau iš tiesų daugiau laiko prarandama bandant gauti metodo savininką, todėl visą try catch dalį pakomentuosime ir atliksim matavimus dar kartą.

Gauti rezultatai:
1) 0,172490358411474
2) 0,186825141184145
3) 0,167233265680415

Ką gi veikimas gerokai paspartėjo ir vis tik WMI šiuo atžvilgiu greičiu neprilygsta Process klasei. Kai kitą kartą rašysite kažką panašaus į Task Manager pagalvokite kas jums svarbiau: greitis ar proceso savininkas.

Panašūs straipsniai


Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.