当前位置: 技术问答>linux和unix
在ARM上用opendir、readdir统计文件总数速度超慢啊
来源: 互联网 发布时间:2016-11-13
本文导语: 我在ARM(主频:500MHz)上用opendir、readdir统计文件总数,2000多文件就用了56秒之多,有没有更好的统计办法呢?代码是不是写得有问题? 附统计代码: if ((dp = opendir(PATH)) == NULL) { ... } while ((dirp = readdir(dp)) != NUL...
我在ARM(主频:500MHz)上用opendir、readdir统计文件总数,2000多文件就用了56秒之多,有没有更好的统计办法呢?代码是不是写得有问题?
附统计代码:
附统计代码:
if ((dp = opendir(PATH)) == NULL) {
...
}
while ((dirp = readdir(dp)) != NULL) {
snprintf(pathname, sizeof(pathname), "%s/%s", PATH, dirp->d_name);
res = lstat(pathname, &statbuf);
if ((res == 0) && S_ISREG(statbuf.st_mode)) {
count++;
}
}
closedir(dp):
|
试试scandir()
速度应该也差不多
速度应该也差不多
|
APUE上有个现成的,试试性能。
或者参考 man 3 ftw
或者参考 man 3 ftw
|
我也很关心这个问题,不知道有什么好的解决方法没有。就是有些系统函数在PC上用可能没有什么问题,但是在资源受限的情况下怎样去避免此类应用过多的消耗资源呢?
我个人的想法是首先程序设计的思路可能换一下,尽量减少不必要循环遍历操作。改变有些功能的设计方案比如让用户自己去选择路径找到目标文件,而不是自动循环遍历等等。
我个人的想法是首先程序设计的思路可能换一下,尽量减少不必要循环遍历操作。改变有些功能的设计方案比如让用户自己去选择路径找到目标文件,而不是自动循环遍历等等。
|
你用fts_open试试
|
看看find命令的统计时间呢
find yourpath | wc -l
find yourpath | wc -l