1

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

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

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

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

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

4

1 回答 1

1

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

static function get_utility_instance() {
    if ( !self::$utility_instance ) {
        self::$utility_instance = new User_model() ;
    }
    self::$utility_instance->clear() ;
    return self::$utility_instance ;
}
于 2013-03-19T22:19:19.537 回答