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