文件写入速度对比

php 打开并写入文件 10万次

<?php
$start_time = microtime(true);

for ($i=0; $i < 100000; $i++) { 
  $myfile = fopen("php_log.txt", "w") or die("Unable to open file!");
  $txt = "--  测试写入文件末尾注释\n";
  fwrite($myfile, $txt);
  fclose($myfile);
}

$end_time = microtime(true);
var_dump(($end_time-$start_time)*1000);

耗时 6955.2180767059 毫秒 即 接近 7 秒

换成 file_put_contents 试试

耗时 7004.5571327209 毫秒 即 7 秒多一点

那说明其实这两种写法差异不大。

采用lua语言试试 由于10万次写入时间太短,改为100万次统计方便点

print(os.time() .. "---"..os.clock())

for i=1,1000000 do
    file = io.open("lua_log.txt", "a")
    io.output(file)
    io.write("--  测试写入文件末尾注释\n")
    io.close(file)
end

print(os.time() .. "---"..os.clock())

打印结果如下:

1624246878---0.00437
1624246884---6.618569

耗时 6.6 秒 ,但是这是100万次哦,所以结果要处以10, 即 660 毫秒,也就是 0.66 秒

然后发现lua的速度是php的10倍左右

然后试试C语言呢 由于C语言实在是太快了,我只好让它写入1000万次

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>

int write_file_now(char *str);

int main(int argc, char *argv[])
{
    struct timeval tvafter,tvpre;
    struct timezone tz;

    gettimeofday (&tvpre , &tz);

    long msecond_diff = 0;
    char *write_str = "--  测试写入文件末尾注释";
    write_file_now(write_str);

    gettimeofday (&tvafter , &tz);

    msecond_diff = (tvafter.tv_sec-tvpre.tv_sec)*1000+(tvafter.tv_usec-tvpre.tv_usec)/1000; 
    printf("%ld\n", msecond_diff);
    
    return EXIT_SUCCESS;
}
int write_file_now(char *str)
{
    FILE *fp = NULL;
    fp = fopen("./c_log.txt", "w+");
    for(int i = 0;i < 10000000; i++)
    {
        fputs(str, fp);
        fprintf(fp,"\n");
    }
    fclose(fp);
    return 1;
}

耗时 537 毫秒,也就是 0.537 秒 ,但是这是1000 万次,要处以 100 得到 5.37 毫秒

这样的话我们大概算一下统计

10万次写入 耗时(毫秒)
php fopen fwrite 6955
php file_put_contents 7004
lua 660
c 5.37

文件写入速度对比

上一篇:this关键字的作用?


下一篇:频谱图插件