我在symfony2和doctrine2的结合上遇到了很多麻烦。我必须处理巨大的数据集(大约 2-3 百万次写入和读取),并且必须做大量额外的工作以避免内存不足。
我找出了两个要点,即“泄漏”内存(它们实际上并不是真正泄漏,而是分配了很多内存)。
-
Entitymanager 实体存储(我不知道这个的真实名称)似乎保留了所有已处理的实体,您必须定期清除此存储
$entityManager->clear()
-
Doctrine QueryCache - 它缓存所有使用过的查询,我发现的唯一配置是,您可以决定要使用哪种缓存。我没有找到全局禁用,也没有找到每个查询禁用它的有用标志。
所以通常我使用该函数为每个查询对象禁用它
$qb = $repository->createQueryBuilder($a);
$query = $qb->getQuery();
$query->useQueryCache(false);
$query->execute();
所以..这就是我现在想到的一切..
我的问题是:
有没有一种简单的方法可以拒绝 Entitymanagerstorage 中的某些对象?
有没有办法在实体管理器中设置查询缓存的使用?
我可以在 Symfony/doctrine 配置中的某个位置配置此缓存行为吗?
如果有人给我一些好的建议,那就太酷了..否则这可能会帮助一些新手..
cya
正如所指出的学说配置参考 http://symfony.com/doc/current/reference/configuration/doctrine.html默认情况下loggingSQL 连接的值设置为内核调试,因此,如果您已实例化 AppKernel,并将调试设置为true每次迭代的 SQL 命令都存储在内存中。
您应该实例化 AppKernelfalse, set logging to false在配置 YML 中,或者在使用 EntityManager 之前手动将 SQLLogger 设置为 null
$em->getConnection()->getConfiguration()->setSQLLogger(null);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)