我有以下两个代码。哪个代码的性能好?
$gd = $this->getDoctrine();
$em = $gd->getEntityManager();
$data = $gd->getRepository('MyB:MyC')->find...;
// update $data.
$em->persist($data);
$em->flush();
我想知道它的内存使用情况和执行速度。
$data = $this->getDoctrine()->getRepository('MyB:MyC')->find...;
// update $data.
$this->getDoctrine()->getEntityManager()->persist($data);
$this->getDoctrine()->getEntityManager()->flush();
答案 0 :(得分:1)
简短回答:前者在大多数情况下会更快,但会占用更多内存。
TL;博士
取决于底层getDoctrine()
如何工作,第二种方法至少会在执行中添加一些方法调用开销。
如果这些方法进行了计算并且没有任何缓存机制,那么您还必须追踪整个调用堆栈。
在内存占用和性能开销之间总是需要权衡。
修改强>
更糟糕的情况:后者将在每次调用getter时创建某种基础数据的实例。这对性能没有帮助,甚至会产生堆峰值。
最佳情况:对getter的所有子序列调用都访问同一个对象,这在DAO或SQL助手中实际上非常罕见,因为在父对象内部保留了引用,所以消耗与第一个完全相同的内存
我在这种情况下的建议是使用第一个。
答案 1 :(得分:1)