'找'优化

时间:2009-12-16 09:44:26

标签: c++ c linux

'find ./ -name *.jpg'

我正在尝试为上述声明优化'find'命令。

在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,base,flags)== 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;

} 

在此之后我预计会有一些性能提升,但在上述变化后我没有看到任何性能提升。

  1. 我做错了吗?
  2. 有没有更好的方法来优化'find'来搜索文件扩展名?

1 个答案:

答案 0 :(得分:5)

我怀疑正则表达式匹配是瓶颈。由于find遍历文件系统,因此开销可能在磁盘搜索时间内,并且在内存文件系统的情况下,在系统调用和结果上下文切换时。