Php 有没有办法释放分配给Symfony 2表单对象的内存?

Php 有没有办法释放分配给Symfony 2表单对象的内存?,php,forms,optimization,memory,symfony,Php,Forms,Optimization,Memory,Symfony,我正在尝试优化一个导入操作,该操作在导入过程中使用Symfony 2表单验证数据,有点像这个简化的示例: /// For each imported row foreach ($importedData as $row) { $user = new User; $userType = new UserType; // !! The 250 KB of memory allotted in this line is never released again !!

我正在尝试优化一个导入操作,该操作在导入过程中使用Symfony 2表单验证数据,有点像这个简化的示例:

/// For each imported row
foreach ($importedData as $row) {

    $user = new User;
    $userType = new UserType;

    // !! The 250 KB of memory allotted in this line is never released again !!
    $form = $symfonyFormFactory->create($userType, $user);

    // This line allots a bunch of memory as well,
    // but it's released when the EM is flushed at the end
    $form->bind($row);

    if (!$form->isValid()) {
        // Error handling
    }

    $entityManager->persist($user);
    $entityManager->flush();
}
这些循环中的每一个循环,内存使用量都会增加大约250KB,这对大型导入来说是一个严重的问题

我发现内存泄漏来自
$form=$symfonyFormFactory->create(newusertype,$user)


编辑:实体管理器正在使用大量内存,而不是表单组件(请参阅接受的答案)。但是每个循环仍然占用55 KB,这比250 KB要好,但可能更好。只是今天不行。

您确定不想释放实体对象吗?首先,不要在每次迭代中刷新数据。让我们假设持久化50个对象-我不知道导入数据有多大-并将它们刷新在一起,然后通过调用$entityManager->clear()清除对象

尝试禁用SQL日志记录以减少内存使用

$entityManager->getConnection()->getConfiguration()->setSQLLogger(null)

我还发现类似的问题

我可能错了,但是
$entityManager->flush()似乎释放了实体内存。我将再次检查以确保…导入应该能够非常长,因此我需要刷新每一行以节省内存。请尝试$entityManager->getConnection()->getConfiguration()->setSQLLogger(null);另外,导入的数据包含多少行?然后在X次迭代后尝试清除实体,因为如果这不起作用,也需要一些时间,而不是快速思考,没有其他的想法,但目前我无法访问我编写的代码。如果这个问题在星期一有效,我可能会提供更多帮助。:)是的,瓦迪姆·阿什赫曼,也许是答案,但我记不起那句话了