Memory Php5.3神奇方法调用和内存
我有一个脚本,使用了很多神奇的方法调用。 脚本有15000个单位,对象更大。 每一次经历之后,记忆都会增长。我使用unset或$val=null;但是记忆在继续增长 我能做什么 例如: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',
$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']
数组)运行您的代码。