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()来测量每个方法所花费的时间。请参见上的第一个示例。