0

我正在将文件加载到 PHP 中的数组中。我正在将文件加载到一个数组中,因为它是一个字典,我想利用二进制搜索来查找我的单词是否在字典中。由于那里有一些不同的信息,我已经尝试了这两种不同的方法。它们的时间非常相似,出于某种原因,我的 1.1MB 文件导致 PHP 使用 20MB 内存。

方法一:

<?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

方法二:

<?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 中的数组的开销似乎比我想象的要大得多。我想我能想到的一种解决方案是解析到文件的中间并读取该行,然后以这种方式进行二进制搜索。然而,进行如此多的文件读取以找到一个值似乎效率低得多。

无论如何,任何见解将不胜感激。

4

0 回答 0