Использование памяти при загрузке файла в PHP

Я загружаю файл в массив в PHP. Я загружаю файл в массив, потому что это словарь, и я хотел бы использовать двоичный поиск, чтобы определить, есть ли мое слово в словаре или нет. Я пробовал это двумя разными способами из-за различной информации. У них очень похожее время, и по какой-то причине мой файл размером 1,1 МБ заставляет PHP использовать 20 МБ памяти.

Способ 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 в массивах в PHP намного больше, чем я себе представлял. Я думаю, одно решение, которое я могу придумать, - это проанализировать середину файла и просто прочитать эту строку и выполнить бинарный поиск таким образом. Однако кажется гораздо более неэффективным делать так много чтений файлов, чтобы найти значение.

В любом случае любое понимание будет высоко ценится.

0 ответов

Другие вопросы по тегам