我使用Datamapper基本上将一堆数据库中的一堆原始数据同步到一个更规范化的数据库。我已经设置了两套模型,每个数据库一个,都扩展了DM。我遇到的问题是我需要将数据库中的数据导入到新数据库中,当我在控制器中创建新的DM对象时,它们似乎在返回创建它的任何方法时都不会被释放。模型不会自动加载关系。
$clients = $this->client->get_iterated();
foreach($clients as $client) {
$this->addUser($client);
}
并在addUser()中创建一个新的User对象,保存并返回。当我输出内存使用量时,它会增加,直到它耗尽所有内容。起初我以为是因为PHP正在创建传递给addUser()的$ client对象的副本,但只是将'return'作为addUser()的第一行显示没有增加内存。只有当我创建新的User对象并保存它时才会这样做。
我尝试在方法结束前使用$ user-> clear()无济于事。
值得注意的是,应用程序最初在原始数据库模型上运行得很好。新模型已创建,保存,然后永不释放。这将在几分钟内通过2演出内存来咀嚼。
答案 0 :(得分:1)
我也遇到过这个问题并花了很多时间进行调试。我们发现的唯一方法是在模型中使用单例实例来创建许多实例,例如:
static function get_utility_instance() {
if ( !self::$utility_instance ) {
self::$utility_instance = new User_model() ;
}
self::$utility_instance->clear() ;
return self::$utility_instance ;
}