c - 为什么 linux 中的 stat64() 随着目录中文件数量的增加而变慢?

标签 c linux fat

我为一个文件夹中的 1000 个文件运行 stat64(),用时不到 1 秒,但当同一目录中有 5000 个文件时,时间增加到 15s

为什么 stat64 () 非线性地变慢?我原以为时间是5秒

编辑 我正在从带有 FAT 文件系统的 USB 读取数据。

最佳答案

当您为包含 N 个条目的目录中的文件调用 stat64 时,复杂度为 O(N),因为对于 FAT 文件系统,系统必须遍历所有目录条目并进行比较每个到您正在寻找的那个。

当您在包含 N 个条目的文件夹中调用 stat64 M 次时,复杂度为 O(M*N),在 M=N 的情况下,您最终得到 O(N *N).

看看你的例子:当你有 stat64 因子 5 文件时,你需要因子 25 时间。如果您的 1s 时间实际上是 0.6 秒,那么结果符合预期。

关于c - 为什么 linux 中的 stat64() 随着目录中文件数量的增加而变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26923338/

相关文章:

c++ - 如何在valgrind中启动时修复 fatal error (与libc6-dbg和libc6-dbg:i386连接)

linux - 什么是内存互锁?

c - FAT12/FAT16-什么决定扇区计数?

linux - 如何从 FAT 镜像恢复已删除的文件?

c - 将结果存储在变量中会产生奇怪的结果

c - C 和 Node.js 之间的 IPC 结果为 "TypeError: Unsupported fd type: UNKNOWN"

c - printf的原型(prototype)和实现

c - 指针之间的区别

linux - 我可以以某种方式在网络上使用 plink 进行 SSH 检查吗?

linux - ext2 "image"文件与真正的 ext2 设备