用 PHP 的 file_put_contents 函数以追加的方式,循环 10 w 次写文件,耗时很多。因为 file_put_contents 函数每次都要打开文件,写入文件,然后关闭文件。
以下是测试:
public function handle()
{
$testTxt = storage_path('test.txt');
for ($i = 0; $i < 100000; $i++) {
$this->comment('writing...');
file_put_contents($testTxt, 'wo shi tanteng.' . PHP_EOL, FILE_APPEND);
}
$this->comment('time:' . round(microtime(true) - LARAVEL_START, 2));
}
如图所示:
耗时 165.76 秒。现在换一种写文件的方式,使用 fwrite 并且加锁的方式同样循环 10w 次写入,代码如下:
public function handle()
{
$testTxt = storage_path('test2.txt');
$handle = fopen($testTxt, 'wr');
flock($handle, LOCK_EX | LOCK_NB);
for ($i = 0; $i < 100000; $i++) {
$this->comment('writing...');
fwrite($handle, 'wo shi tanteng.' . PHP_EOL);
}
flock($handle, LOCK_UN);
fclose($handle);
$this->comment('time:' . round(microtime(true) - LARAVEL_START, 2));
}
运行效果如图:
如图所示,耗时 40.46 s,大大提高了效率。
跟 file_put_contents 函数比, fwrite 提高了写文件的效率,同时使用 flock 进行写文件加锁,防止并发同时操作一个文件。
电神魔傀2街机免费版 官方版v1.2.1
下载三国战纪2手游腾讯渠道服 安卓版v2.41.0.0
下载三国战纪2手游抖音渠道服 安卓版v2.41.0.0
下载三国战纪2折扣服 安卓版v2.41.0.0
下载叫我大掌柜小米版 安卓版v7.4.4
叫我大掌柜小米版是这款模拟经营类手游的渠道服版本,在此版本中
cooking fever正版 安卓最新版v23.0.2
cooking fever正版是一款非常好玩的模拟经营类手游
咖啡厅的生活故事 最新版v1.7
咖啡厅的生活故事是一款模拟经营游戏,玩家们在游戏中可以经营一
迅猛龙模拟器金币不减反增版 v1.1.8
迅猛龙模拟器无限金币版是一款动物模拟类游戏,玩家们将在游戏中
泽塔奥特曼升华器免广告版 v1.4
泽塔奥特曼升华器去广告版是游戏的破解版本,在该版本中为玩家去