PHPの配列にファイルをロードしています。ファイルは辞書であるため、ファイルを配列にロードしています。バイナリ検索を使用して、自分の単語が辞書にあるかどうかを確認したいと考えています。さまざまな情報があるため、この2つの異なる方法を試しました。それらは非常に似た時間であり、何らかの理由で私の 1.1MB ファイルが原因で PHP が 20MB のメモリを使用しています。
方法 1:
<?php
echo 'Memory Usage Start: ' . memory_get_usage() . '<br>';
$start = microtime(true);
$fs=fopen("./dictionary.txt", "r");
$dictionary=array();
while (!feof($fs)){
$dictionary[]=trim(fgets($fs));
}
$end = microtime(true);
echo 'Memory Usage End: ' . memory_get_usage() . '<br>';
echo 'Total Time: ' . ($end - $start) . ' seconds';
出力は次のとおりです。
Memory Usage Start: 5298144
Memory Usage End: 25254944
Total Time: 0.17744994163513 seconds
方法 2:
<?php
echo 'Memory Usage Start: ' . memory_get_usage() . '<br>';
$start = microtime(true);
$dictionary = file('./dictionary.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$end = microtime(true);
echo 'Memory Usage End: ' . memory_get_usage() . '<br>';
echo 'Total Time: ' . ($end - $start) . ' seconds';
出力は次のとおりです。
Memory Usage Start: 5297240
Memory Usage End: 25244920
Total Time: 0.074188947677612 seconds
私が想像していたよりも、PHP の配列にははるかに大きなオーバーヘッドがあるようです。私が考えることができる 1 つの解決策は、ファイルの途中まで解析し、その行を読み取るだけで、そのようにバイナリ検索を行うことだと思います。ただし、値を見つけるために非常に多くのファイル読み取りを行うのは、はるかに非効率的です。
とにかく、どんな洞察も大歓迎です。