Kibenchmarkoltam én:/* pidfind_tch */
#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
long int get_pid_by_process_name(char *pname)
{
DIR *d;
struct dirent *dir;
FILE *f;
char entry[24];
char buf[256];
long int l;
d = opendir("/proc");
if (d)
{
while ((dir = readdir(d)) != NULL)
{
strcpy(entry, "/proc/");
strcat(entry, dir->d_name);
strcat(entry, "/cmdline");
f = fopen(entry, "rb");
if (f != NULL)
{
fread(&buf[0], 1, 256, f);
fclose(f);
l = -1;
while ((++l < 257) && (buf[l]) && (buf[l] != 32));
buf[l] -= (buf[l] == 32) << 5;
if (l)
{
while ((buf[--l] != 47) && l);
l += (buf[l] == 47);
if (!strcmp(pname, &buf[l]))
{
return atol(dir->d_name);
}
}
}
}
return -1; /* nincs ilyen */
closedir(d);
}
return -2; /* nem lehet megnyitni a /proc-ot */
}
int main(int argc, char *argv[])
{
/*QCoreApplication a(argc, argv);*/
int i;
for (i = 0; i < 1000; ++i)
{
get_pid_by_process_name("konsole");
get_pid_by_process_name("opera");
get_pid_by_process_name("d3lphin");
get_pid_by_process_name("mousepad");
}
return 0;
} /* pidfind_kemi */
#include <QCoreApplication>
#include <QProcess>
#include <QStringList>
#include <stdio.h>
int getPID(QString processName)
{
QProcess proc;
QStringList args;
args << "-c" << "ps aux | grep \"" + processName + "\" | grep \"root\"";
proc.start("/bin/sh", args);
proc.waitForFinished();
QString s = proc.readLine();
QStringList list = s.simplified().split(" ");
if (list[0] != "root")
{
return -1;
}
return list[1].toInt();
}
int main(int argc, char *argv[])
{
/*QCoreApplication a(argc, argv);*/
int i;
for (i = 0; i < 1000; ++i)
{
getPID("konsole");
getPID("opera");
getPID("d3lphin");
getPID("mousepad");
}
return 0;
} Tessék kemi. Ugyanaz a keret, ugyanúgy Qt5 fordítja, ugyanúgy 4 féle processt keres, ugyanúgy 1000x fut le, minden ugyanaz, csak a tiéd a ps-t és a grep-et hívogatja rendszerhívással, az enyém meg a /proc könyvtárat túrja. Eredmény:root@Csabi:~/qtproj/build-pidfind-Desktop_Qt_5_3_0_GCC_64bit-Debug# time pidfind_tch
real 0m1.729s
user 0m0.264s
sys 0m1.424s
root@Csabi:~/qtproj/build-pidfind-Desktop_Qt_5_3_0_GCC_64bit-Debug# time pidfind_kemi
real 1m9.365s
user 0m23.216s
sys 0m29.176s Az enyém 1729 ms alatt végzett, a tiéd 69365 ms alatt. A különbség 40x-es. (Nem is becsültem olyan rosszul, az előző postomban; nagyságrendileg stimmelt.)
Komment azt hiszem nem szükséges. Rövidebb kód != gyorsabb kód. |