修改已读取文件内容的最后字符:strlen与filesize哪个更快?
字符串末尾字符修改:strlen 与 filesize 的性能对比
假设已通过file_get_contents('file.ext')读取文件内容并存储到变量$a中,需求是修改该字符串的最后一个字符。请问以下两种写法哪种执行速度更快?
第一种写法:
$a[strlen($a) - 1] = 'b';
第二种写法:
$a[filesize('file.ext') - 1] = 'b';
我原本猜测filesize的返回值可能会被文件系统缓存,或者文件在内存中的首尾地址已知,只需计算差值就能快速得到长度,理论上性能会更优。
为此我做了基准测试,每组结果中第一个数值是使用strlen的耗时(单位:秒),第二个是使用filesize的耗时:
9 - 6 2.5 - 5 2 - 5 2.8 - 5 2.4 - 5 4.19 - 5 1 - 5 2.9 - 5 9 - 6 2.69 - 5 9 - 6 2.9 - 6
测试结果显示strlen的执行速度明显更快。不过正如@nice_dev指出的,file_get_contents本身会调用filesize来确定要读取的字节数,或许搭配fopen来使用filesize才是更公平的性能对比场景。
内容的提问来源于stack exchange,提问作者Stdugnd4ikbd
相关产品推荐
相关产品推荐

