在 Ubuntu(本质上是 Linux 内核 + glibc)里,readdir 的性能总体很好,但具体表现取决于文件系统类型、目录大小、缓存状态、是否使用 readdir vs readdir_r / getdents等因素。下面分点说明。
readdir 本身是什么readdir 是 glibc 对内核 getdents / getdents64 的封装readdir_r,但已不推荐)示例(EXT4,热缓存):
readdir 通常 < 50ms冷缓存(从磁盘读):
| 文件系统 | readdir 性能 |
|---|---|
| ext4 | 很好 |
| xfs | 大目录非常好 |
| btrfs | 中等,大目录较弱 |
| tmpfs | 极快(内存) |
| NFS | 受网络影响大 |
| overlayfs | 多次合并,较慢 |
readdir vs getdentsreaddir:方便,但多一层封装getdents64:
syscall(SYS_getdents64, ...)opendir + readdir 足够DIR *d = opendir(path);
struct dirent *e;
while ((e = readdir(d))) {
// count
}
closedir(d);
用 time 测,热缓存下非常快。
如果你愿意,可以告诉我:
我可以给你更具体的性能预估或优化方案。