0

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 つの解決策は、ファイルの途中まで解析し、その行を読み取るだけで、そのようにバイナリ検索を行うことだと思います。ただし、値を見つけるために非常に多くのファイル読み取りを行うのは、はるかに非効率的です。

とにかく、どんな洞察も大歓迎です。

4

0 に答える 0