我在这里寻求与Symfony 4有关的问题的帮助。
实际上,我使用Symfony 4开发了一个Rest API,直到今天对API的调用变得非常缓慢时,一切工作都非常好。
首先,他给了我以下错误:在第186行的/home/user/tlt_symfony_back/vendor/jms/serializer/src/JsonSerializationVisitor.php中,已用尽内存大小268435456字节(试图分配98570240字节) 2019-03-20T12:55:19 + 01:00 [严重]致命错误:耗尽的内存容量为268435456字节(试图分配98570240字节)
我通过在 php.ini 中将 memory_limit 设置为 512M 解决了的问题,但是呼叫接听时间太长。使用Postman可以完全关闭窗口。
我将 FOSRestBundle 与 Jms_serializer 一起使用。
预先感谢您的帮助。
这是获取所有公告的示例代码:
public function getAnnonces(Request $request, ObjectManager $manager){
$annonces = $manager->getRepository(Annonces::class)->findAll();
if(!$annonces)
return new JsonResponse([
'status' => 'error',
'message' => 'Il existe aucune annonce'
]);
return $annonces;
}
并且Annonces实体具有基本属性: 标题:字符串, 类型:字符串, 用户:与用户实体的ManyToOne关系
数据库:Mysql。
答案 0 :(得分:0)
在存储库调用之后尝试转储$ annonces,真的有一个轻量级的对象吗?尝试通过
获得一个公告$annonces = $manager->getRepository(Annonces::class)->find(1);
在这里您需要具有关系的学说实体吗?如果没有,请尝试获取内容的数组
$qb = $manager->createQueryBuilder();
$annonces = $qb->select('a')->from(Annonces::class, 'a')->getQuery()->getResult(\PDO::FETCH_ASSOC);
答案 1 :(得分:0)
如果在没有任何源代码更改的情况下发生问题,则表示问题是从一开始就出现的,但是您所察觉的范围并不大。
我的第一枪是检查数据库关系。例如,如果您具有一个OneToMany关系,该关系为fetch =“ EAGER”或fetch =“ LAZY”,并且您在右侧表中有很多元素,则它将减慢查询左侧表的速度。您可以做一个简单的检查,就是在Annonces实体中的每个OneToMany和ManyToMany关系中添加fetch =“ EXTRA_ LAZY”时出现问题。
https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/extra-lazy-associations.html https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/annotations-reference.html#annref_onetomany
如果这无济于事,建议您检查表索引。