Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么linux中的stat64()会随着目录中文件数量的增加而变慢?_C_Linux_Fat - Fatal编程技术网

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

C 为什么linux中的stat64()会随着目录中文件数量的增加而变慢?,c,linux,fat,C,Linux,Fat,我对一个文件夹中的1000个文件运行stat64(),时间不到1秒,但当同一目录中有5000个文件时,时间增加到15s 为什么stat64()的速度会非线性变慢?我希望时间是5秒 编辑 我正在使用FAT文件系统从USB读取数据。当您调用stat64查找包含N个条目的目录中的文件时,复杂性为O(N),因为使用FAT文件系统,系统必须遍历所有目录条目,并将每个条目与您要查找的条目进行比较 当您在包含N个条目的文件夹中调用stat64M次时,复杂性为O(M*N),如果M=N,则以O(N*N)结束 看看

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

为什么
stat64()
的速度会非线性变慢?我希望时间是5秒

编辑
我正在使用FAT文件系统从USB读取数据。

当您调用
stat64
查找包含N个条目的目录中的文件时,复杂性为O(N),因为使用FAT文件系统,系统必须遍历所有目录条目,并将每个条目与您要查找的条目进行比较


当您在包含N个条目的文件夹中调用
stat64
M次时,复杂性为O(M*N),如果M=N,则以O(N*N)结束


看看你的例子:当你有和
stat64
factor 5文件时,你需要25倍的时间。如果1s时间实际上是0.6秒,则结果与预期一致。

当您调用包含N个条目的目录中的文件时,复杂性为O(N),因为对于FAT文件系统,系统必须遍历所有目录条目,并将每个条目与您要查找的条目进行比较


当您在包含N个条目的文件夹中调用
stat64
M次时,复杂性为O(M*N),如果M=N,则以O(N*N)结束


看看你的例子:当你有和
stat64
factor 5文件时,你需要25倍的时间。如果1s时间实际上是0.6秒,则结果与预期一致。

当您调用包含N个条目的目录中的文件时,复杂性为O(N),因为对于FAT文件系统,系统必须遍历所有目录条目,并将每个条目与您要查找的条目进行比较


当您在包含N个条目的文件夹中调用
stat64
M次时,复杂性为O(M*N),如果M=N,则以O(N*N)结束


看看你的例子:当你有和
stat64
factor 5文件时,你需要25倍的时间。如果1s时间实际上是0.6秒,则结果与预期一致。

当您调用包含N个条目的目录中的文件时,复杂性为O(N),因为对于FAT文件系统,系统必须遍历所有目录条目,并将每个条目与您要查找的条目进行比较


当您在包含N个条目的文件夹中调用
stat64
M次时,复杂性为O(M*N),如果M=N,则以O(N*N)结束


看看你的例子:当你有和
stat64
factor 5文件时,你需要25倍的时间。如果1s的时间实际上是0.6秒,则结果与预期一致。

因为您使用的是一个玩具文件系统,该系统正在扫描每个名称查找的条目列表。请尝试XFS(最佳)或ext4,或在ext3上启用“dir_index”。您的文件系统类型是什么?@Insane Coder:您是在这两种情况下都保存1000个文件,还是保存存在的每个文件?@WernerHenze:存在的每个文件。第一种情况是1000个文件,第二种情况是5000个文件。因为您使用的是一个玩具文件系统,它扫描每个名称查找的条目列表。请尝试XFS(最佳)或ext4,或在ext3上启用“dir_index”。您的文件系统类型是什么?@Insane Coder:您是在这两种情况下都保存1000个文件,还是保存存在的每个文件?@WernerHenze:存在的每个文件。第一种情况是1000个文件,第二种情况是5000个文件。因为您使用的是一个玩具文件系统,它扫描每个名称查找的条目列表。请尝试XFS(最佳)或ext4,或在ext3上启用“dir_index”。您的文件系统类型是什么?@Insane Coder:您是在这两种情况下都保存1000个文件,还是保存存在的每个文件?@WernerHenze:存在的每个文件。第一种情况是1000个文件,第二种情况是5000个文件。因为您使用的是一个玩具文件系统,它扫描每个名称查找的条目列表。请尝试XFS(最佳)或ext4,或在ext3上启用“dir_index”。您的文件系统类型是什么?@Insane Coder:您是在这两种情况下都保存1000个文件,还是保存存在的每个文件?@WernerHenze:存在的每个文件。第一种情况是1000个文件,第二种情况是5000个文件。