繁体   English   中英

Codeigniter Datamapper —创建新对象而不释放内存

[英]Codeigniter Datamapper — Creating new objects and not freeing memory

我正在使用Datamapper基本上将一个数据库中的一堆原始数据同步到一个更规范的数据库。 我已经建立了两组模型,每个数据库一组,都扩展了DM。 我遇到的问题是,我需要将大量演出的数据导入新数据库,并且当我在控制器中创建新的DM对象时,返回创建它们的任何方法似乎都无法释放它们。 模型不会自动加载关系。

$clients = $this->client->get_iterated();
foreach($clients as $client) {
  $this->addUser($client);
}

然后在addUser()中创建一个新的User对象,保存并返回。 当我输出此的内存使用量时,它只会增加,直到耗尽所有内容为止。 起初我以为是因为PHP正在创建传递给addUser()的$ client对象的副本,但只是在addUser()的第一行添加一个“ return”,表明内存没有增加。 仅当我创建新的User对象并保存它时。

我试图在方法结束前使用$ user-> clear()无效。

值得一提的是,该应用程序最初在原始数据库模型上运行就可以了。 创建,保存并从未释放新模型。 从字面上看,这将在几分钟内吞噬2 GB的内存。

我也遇到了这个问题,并花费了许多时间进行调试。 我们发现绕过它的唯一方法是在模型中使用单例实例进行创建许多实例的操作,例如:

static function get_utility_instance() {
    if ( !self::$utility_instance ) {
        self::$utility_instance = new User_model() ;
    }
    self::$utility_instance->clear() ;
    return self::$utility_instance ;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM