Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP使用的内存超过了所需的文件_Php_Memory_Memory Management - Fatal编程技术网

PHP使用的内存超过了所需的文件

PHP使用的内存超过了所需的文件,php,memory,memory-management,Php,Memory,Memory Management,以给定的示例代码为例: <?php if (! function_exists('human_filesize')) { function human_filesize($size, $precision = 2, $step = 1000) { $i = 0; $units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; while (($size / $

以给定的示例代码为例:

<?php

if (! function_exists('human_filesize')) {
    function human_filesize($size, $precision = 2, $step = 1000)
    {
        $i = 0;
        $units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];

        while (($size / $step) > 0.9) {
            $size = $size / $step;

            $i++;
        }

        return round($size, $precision) . ' ' . $units[$i];
    }
}

if (! function_exists('dd')) {
    function dd($vars)
    {
        foreach (func_get_args() as $var) {
            var_dump($var);
        }

        die();
    }
}

$start = microtime(true);
$usage = memory_get_usage(true);

require "brown_corpus.php"; // It's 1.6 MB

$dump[] = round(microtime(true) - $start, 3);
$dump[] = human_filesize(memory_get_usage(true) - $usage);

dd(...$dump); // 0.063ms to run | 38.01 MB memory used

文件的大小与它所消耗的内存量无关。如果不看brown_corpus.php,就不可能知道它是如何消耗内存的,但请记住,代码(通常)是描述它实际创建的结构的一种浓缩方式。考虑以下事项:

$arr = array();
for ($i = 0; $i < 100000; $i++) {
    $arr[$i] = $i;
}
$arr=array();
对于($i=0;$i<100000;$i++){
$arr[$i]=$i;
}
将其保存到一个php文件中,它将占用大约70个字节。运行它,它将创建一个包含100000个元素的数组结构,每个元素都是8字节整数。Boom,使用了800千字节


实际上,情况远比这糟糕,因为PHP在您的系统上是如何配置的,更不用说PHP带来的各种开销了(例如,它存储数组的方式让人难以置信——请参见)。

这些文章似乎真的很好地解释了这一点
brown_语料库
包含返回的大量键/值对数组。因此,这将解释当需要进入内存时,如何消耗更多的字节。我想知道DB查找是否更好,但脚本运行肯定会花费更长的时间,但内存占用更少。很快给予赏金…是的,不同类型的内存使用范围广泛。您可以在任何变量赋值之前和之后执行memory_get_usage(),以大致了解该类型或结构使用了多少内存,但值会因系统而异。如果您希望在时间方面比较不同的方法,我建议使用microtime()来测量每个方法所花费的时间。请参见上的第一个示例。