PHP_PHP チュートリアルの fwrite および file_put_contents パフォーマンス テスト コード

WBOY
リリース: 2016-07-21 15:00:10
オリジナル
1444 人が閲覧しました

関数 microtimeFloat() {
list($usec,$sec) =explode(" ", microtime());
return((float)$usec + (float)$sec);
}

1. file_put_contents をテストします

コードをコピー コードは次のとおりです:

$userCount = 1000;
$itemCount = 1000;
$file = '評価.txt';
file_exists($file) &&unlink ($file );

$timeStart = microtimeFloat();
for ($i = 0; $i < $userCount; $i++) {
$uid =random(32);
for ($j = 0;$j < $itemCount ; $j++) {
$itemId = mt_rand(1, 300000);
$評価 = $j == 0 ? 1 : mt_rand(1, 100) / 100;
$line = sprintf("%s,%d, %sn", $uid, $itemId, $ ratings);
file_put_contents($file, $line, FILE_APPEND);
}
}
$timeEnd = microtimeFloat();
echo sprintf("滞在時間: |%s| Second(s)n", $timeEnd -$timeStart);
?>

テスト結果:
テスト中にファイルを開くときにエラーが発生し、プログラムの実行後に書き込まれたデータは不完全で、999997行のみで、3行が欠落していました。最も重要な点は、fwrite を使用した場合には 307 秒以上かかったということです。その差はまだ小さくありません。

D:myphpresearch>php test2.php
PHP 警告: file_put_contents(評価.txt): ストリームを開けませんでした: D:myphpresearchtest2.php の 79 行目で許可
が拒否されました

警告: file_put_contents(評価.txt): ストリームを開けませんでした: D:myphpresearchtest2.php の 79 行目で許可が拒否されました
所要時間: |307.0586669445| 秒

...

999994:98xDtLjaeD8MG9ywifegZvRRQzVBZbbw,167670,0.15
999995:98xDtLjaeD8MG9ywifegZvrRQzVBZbbw,234223,0.13
999996:98xDtLjaeD 8MG9ywifegZvRRQzVBZbbw,84947,0.79
999997:98xDtLjaeD8MG9ywifegZvRRQzVBZbbw,6489,0.38

2. fwrite をテストします

コードをコピー コードは次のとおりです:
$userCount = 1000;
$itemCount = 1000;
$file = '評価.txt';
file_exists($file) &&unlink ($file );

$fp = @fopen($file, 'ab');

if (!$fp) die("$file を開くのに失敗しました");

$timeStart = microtimeFloat();

for ($i = 0; $i < $userCount; $i++) {
$uid =random(32);
for ($j = 0;$j < $itemCount ; $j++) {
$itemId = mt_rand(1, 300000);
$評価 = $j == 0 ? 1 : mt_rand(1, 100) / 100;
$line = sprintf("%s,%d, %sn"、$uid、$itemId、$評価);
();
echo sprintf("所要時間: |%s| 秒n", $timeEnd -$timeStart) ;
?>



テスト結果:
約 10 秒で 100 万行のレコードを書き込みます。PHP の場合、速度はかなり良好です。これは私のパーソナル コンピュータでテストされたもので、実稼働マシンでテストすると、さらに高速になる可能性があります。
D:myphpresearch>php test2.php
所要時間: |10.764221191406|秒

fwriteで書き込まれたデータが完成しました

999997,QOvcZYFJFlFHjiGyGxAc615kOXdX3Yii,246982,0.03
999998,QOvcZYFJFlFHjiGyGyAc615kOXdX3Yii,240160,0.39
99 99 99,QOvcZYFJFlFHjiGyGxAc615kOXdX3Yii,46296,0.61
1000000,QOvcZYFJFlFHjiGyGxAc615kOXdX3Yii,26211,0.14

3. まとめ
大量のデータをファイルに書き込む場合は、file_put_contents の代わりに fwrite を使用することをお勧めします。同時実行性の高いリクエストでは fwrite を使用することも推奨されます。


http://www.bkjia.com/PHPjc/328086.html

www.bkjia.com

tru​​e

技術記事 function microtimeFloat() { list($usec,$sec) =explode(" ", microtime()); return((float)$usec + (float)$sec); } 1. file_put_contents をテストします。次のようにコードをコピーします。 ? php $userCount...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート