'find ./ -name *.jpg'
我想優化上面的語句的'發現'命令。'發現'優化
在find實現中處理'-name'謂詞的方法。
static boolean
pred__name __common (const char *pathname, const char *str, int flags)
{
boolean b;
char *base = base_name (pathname);
strip__trailing __slashes(base);
b = fnmatch (str, base, flags) == 0;
free (base);
return b;
}
因爲我尋找文件擴展名,並希望避免正則表達式基於字符串匹配,我 '替代B =的fnmatch(STR,基礎上,標誌)== 0;'與以下陳述
int strLen = strlen(base);
b = FNM_NOMATCH;
if (strLen>=4 && (str[3] == base[strLen]) &&
(str[2] == base[strLen -1]) && (str[1] ==
base[strLen-2]) && (str[0] == base[strLen-3]))
{
b = 0;
}
之後,我期望一些性能增益,但我沒有看到上述變化後的任何種類的性能增益。
- 是我在做一些事情錯了嗎?
- 有沒有更好的方法來優化'查找'以僅搜索文件擴展名?
分析後我在fnmatch上有一些更好的數字 - CPU使用率,fnmatch這個活動佔用了將近16%的CPU。 我認爲,我不能減少運行查找所需的總時間(正如Thomas告訴它的是更多的磁盤活動),但應該可以通過一些更多優化來降低查找的CPU使用率。 – 2009-12-17 06:19:11