【问题标题】:How to decrease memory usage when passing big variables around传递大变量时如何减少内存使用量
【发布时间】:2013-03-17 14:34:37
【问题描述】:

例如:

a(wordwrap(str_repeat('abcdef', 500000), 160, "\n", true));    

function a($v){
  $v[1] = 'x';      
  $v = b($v);
  return $v;
}

function b($v){
  $v[2] = 'x';    
  $v = c($v);
  return $v;
}

function c($v){
  $v[3] = 'x';  
  d($v);    
}

function d($v){
  $v[4] = 'x';
  print $v;
}

这使用约 23 MB。我认为是因为 PHP 在每次修改时都会创建该文本的副本。 如果我只在文本使用 12 MB 时打印它。

我可以在调用函数之前以某种方式释放原始变量的内存吗?喜欢

unset($v);
$v = c($v);

显然这不起作用,因为$v 在传递给c() 之前就被销毁了,哈哈。但我想以某种方式让c() 修改相同的文本。就像使用参考一样。 (我尝试了引用,但它们实际上增加了内存使用量,可能是因为 PHP 制作了更多副本)

【问题讨论】:

    标签: php variables memory


    【解决方案1】:

    是的,你是对的,PHP 使用写时复制的方法。您可能想尝试参考,例如:

    function a(&$v){
        $v[1] = 'x';      
        $v = b($v);
        return $v;
    }
    

    我刚刚注意到,您尝试了引用,您确定内存使用率没有降低吗?

    【讨论】:

    • 奇怪的是我在上面发布的代码,但对于我正在处理的真实代码来说它更高:(
    • 可能你遗漏了一些重要的部分,这会在实际代码中占用内存?是否太大/复杂/共享软件无法在此处发布?
    猜你喜欢
    • 2018-07-12
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多