有没有可能获得性能提升?
计数:10,000,000(50,000 个文件,循环 200 次)
stat *
: 真实 - 8m 47.112s
cd ...
: 真实 - 8m 47.475s
stat dir/dir/dir/*
: 真实 - 9m 33.609s
如果是这样,如何对其进行基准测试?
我使用以下命令进行测试:
mkdir dir;
mkdir dir/dir;
mkdir dir/dir/dir;
cd dir/dir/dir;
touch $(seq 1 50000);
time for i in $(seq 1 200); do stat * > /dev/null; done;
cd ../../../;
time for i in $(seq 1 200); do stat dir/dir/dir/* > /dev/null; done;
time $(cd dir/dir/dir; for i in $(seq 1 200); do stat * > /dev/null; done; cd ../../../);
如果可以进行基准测试,那么目录中必须有多少文件才能在 cd 进出它所花费的时间上达到平衡?
如果没有没有其他进程运行的专用系统,就不可能确切知道这个数字,但看起来“收支平衡”数字似乎是:
1 目录:2,500
2 目录:1,250
3 目录:1,000
这也会影响 Java、PHP、Python 等的文件操作吗?
使用常识,我认为路径会增加这个微小的时间差异,但我能想到的唯一真正的解决方案是将所有包含的文件放在一个目录中,制作一个单独的包含文件以包含所有包含,并在您的运行时代码中包含“质量包含器”。