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


Codeigniter Datamapper -- Creating new objects and not freeing memory

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

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

在 addUser() 中,它创建一个新的 User 对象,保存它并返回。当我输出它的内存使用量时,它只会增加,直到耗尽所有内容。起初我以为这是因为 PHP 正在创建传递给 addUser() 的 $client 对象的副本,但简单地将"return"作为 addUser() 的第一行显示内存没有增加。仅当我创建新的 User 对象并保存它时。

我尝试在方法结束之前使用 $user->clear() 无济于事。

值得注意的是,该应用程序最初在原始数据库模型上运行得很好。新模型被创建、保存,然后永远不会释放。这将在几分钟内咀嚼 2 个演出的内存。

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

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