我在XML解析脚本中泄漏了一些内存,但是我遇到了很多问题。
我通过将我的整个OOP代码重写为非OOP(主要是数据库检查和插入)来解决这个问题,但是我很好奇是什么导致了它?我正在使用Zend Framework,一旦删除了所有模型,就没有泄漏。
只是为了让你知道它有多糟糕: 我在相同数量的文件上运行了大约30k项目。所以,每个文件一个。它开始时使用5mb !!!或RAM,当文件本身只有大约20kb。
可能是我读过的那些引用功能吗?我认为那个错误已修复了?!
修改
我发现泄漏是由于使用Zend Framework数据库类造成的。有没有办法在每次迭代后调用一个关闭函数,以便清除资源?
答案 0 :(得分:1)
由于我们没有可以使用的代码,所以很难回答这个问题。
恢复到源代码的OOP版本并创建一个小类,如下所示:
abstract class MemoryLeakLogger
{
public static $_logs = array();
public function Start($id,$action)
{
self::$_logs[$id] = array(
'action' => $action,
'start_ts' => microtime(),
'memory_start' => memory_get_usage()
);
}
public function End($id)
{
self::$_logs[$id]['end_ts'] = microtime();
self::$_logs[$id]['memory_end'] = memory_get_usage();
}
public static function GetInformation(){return self::$_logs;}
}
然后在您的应用程序中执行以下操作:
MemoryLeakLogger::Start(":xml_parse_links_set_2", "parsing set to of links");
/*
* Here you would do the relative code
*/
MemoryLeakLogger::End(":xml_parse_links_set_2");
在整个应用程序中,您将需要创建计算以收集内存使用的偏移量和每个操作所需的时间,一旦您的脚本完成,只需通过以可读方式打印信息来调试信息并查找峰值< / p>
您还可以使用xdebug跟踪您的申请。
希望这有帮助