gpt4 book ai didi

Symfony 和 PhpUnit 内存泄漏

转载 作者:行者123 更新时间:2023-12-02 02:07:59 26 4
gpt4 key购买 nike

在 phpunit 测试中加载 Doctrine 时,我们遇到内存泄漏问题

开始查看 Symfony 的文档: http://symfony.com/doc/2.7/cookbook/testing/doctrine.html我们已经编写了这个测试:

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

class memoryleakTest extends KernelTestCase
{
private $em;

protected function setUp()
{
self::bootKernel();

$this->em = static::$kernel->getContainer()
->get('doctrine')
->getManager();
}

protected function tearDown()
{
parent::tearDown();

$this->em->close();
}

function testEEE1() {
}
function testEEE2() {
}
function testEEE3() {
}
function testEEE4() {
}
function testEEE5() {
}
function testEEE6() {
}
function testEEE7() {
}
function testEEE8() {
}
function testEEE9() {
}
function testEEE10() {
}
function testEEE11() {
}
function testEEE12() {
}
function testEEE13() {
}
function testEEE14() {
}
function testEEE15() {
}
function testEEE16() {
}
}

我们得到了这个结果(括号内的 php_memory_usage):

testEEE1: . (42M)
testEEE2: . (42.7M)
testEEE3: . (43.3M)
testEEE4: . (44M)
testEEE5: . (44.8M)
testEEE6: . (45.5M)
testEEE7: . (46.1M)
testEEE8: . (46.8M)
testEEE9: . (47.4M)
testEEE10: . (48.1M)
testEEE11: . (48.7M)
testEEE12: . (49.4M)
testEEE13: . (50.1M)
testEEE14: . (50.7M)
testEEE15: . (51.4M)
testEEE16: . (52M)

如果我们删除设置中加载的条令管理器,则每次测试我们都会得到 (32,7M)

在拆卸功能中每次测试后卸载 Doctrine 是正确的方法吗?

最佳答案

完整的解决方案可以在这里找到: https://github.com/symfony/symfony/issues/18236

对于 phpunit 测试中使用的每个服务,如果您希望垃圾收集器释放内存,则必须通过将 null 分配给变量来释放它。

protected function tearDown()
{
parent::tearDown();

$this->em->close();

$this->em=null;

gc_collect_cycles();
}

关于Symfony 和 PhpUnit 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36032168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com