Memory Php5.3神奇方法调用和内存

Memory Php5.3神奇方法调用和内存,memory,call,php-5.3,Memory,Call,Php 5.3,我有一个脚本,使用了很多神奇的方法调用。 脚本有15000个单位,对象更大。 每一次经历之后,记忆都会增长。我使用unset或$val=null;但是记忆在继续增长 我能做什么 例如: $data = null; foreach ($field['method']['actions'] as $action) { // si l'action ne concerne pas le name space principal if (!array_key_exists('get',

我有一个脚本,使用了很多神奇的方法调用。 脚本有15000个单位,对象更大。 每一次经历之后,记忆都会增长。我使用unset或$val=null;但是记忆在继续增长

我能做什么

例如:

$data = null;
foreach ($field['method']['actions'] as $action) {
    // si l'action ne concerne pas le name space principal
    if (!array_key_exists('get', $action)) {
        continue;
    }
    if (array_key_exists('begin', $action)) {
        $data .= $action['begin'];
    }
    if (array_key_exists('action', $action)) {
        $obj = $notice->__call('get' . ucfirst($action['action']));
        $notice->clear();
        if (is_object($obj)) {
            $rsl = $obj->__call('get' . ucfirst($action['get']));
            $obj->clear();
            echo "\n" . 'get' . ucfirst($action['get']) . ' : '  . number_format(memory_get_usage());
            $data .= $rsl;
            unset($rsl);
        } else {
            $data .='';
        }
        $obj = null;
    } else {
        $data .= $notice->__call('get' . ucfirst($action['get']));
        $notice->clear();
        echo "\n" . 'get' . ucfirst($action['get']) . ' : '  . number_format(memory_get_usage());
    }
    if (array_key_exists('end', $action)) {
        $data .= $action['end'];
    }
}
//--
class Notice{
    //--

    protected $instanceObj = null;

    public function __call($name, $arguments = null) {
        $this->instanceObj = $this->$name($arguments);
        return $this->instanceObj;
    }

    public function clear(){
         $this->instanceObj = null;
     }

    //--
}
日志文件的一个示例:

getField : 24,446,752
getField : 24,447,352
getField : 24,447,720
getField : 24,448,096
getField : 24,483,320
getField : 24,483,336
getField : 24,483,728
...
getField : 25,267,936
...
getField : 35,596,712
...

您可以看到内存从未停止浏览。

唯一的解决方案是将脚本按顺序执行几次。问题不在于PHP Symfony,而是生成了太多的对象。所以我运行脚本Pacquet x。否则会导致内存饱和。

如果您认为在PHP中发现内存泄漏,可以发布错误报告,并得到“谢谢,但这不是错误”的回复。这就是PHP bug通常使用的方式。否则,如果您可以制作一个仍然显示内存泄漏的最小示例,并将其发布到此处,我们可能会查看它是否有其他问题。我的问题是,您的代码不足以重现您的问题。您根本没有调用
注意::\uu call()
作为一个神奇的方法(您显式地调用它,所以没有神奇的事情发生),您正在调用
\uu call()
方法中的其他
注意方法,这些方法在您的示例中没有定义,并且没有输入数据(
$field['method']['actions']
数组)运行您的代码。