PHP脚本的内存使用和执行速度

时间:2012-12-06 08:56:25

标签: php performance symfony

我有以下两个代码。哪个代码的性能好?

$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();

2 个答案:

答案 0 :(得分:1)

简短回答:前者在大多数情况下会更快,但会占用更多内存。

TL;博士

取决于底层getDoctrine()如何工作,第二种方法至少会在执行中添加一些方法调用开销。

如果这些方法进行了计算并且没有任何缓存机制,那么您还必须追踪整个调用堆栈。

在内存占用和性能开销之间总是需要权衡。

修改

更糟糕的情况:后者将在每次调用getter时创建某种基础数据的实例。这对性能没有帮助,甚至会产生堆峰值。

最佳情况:对getter的所有子序列调用都访问同一个对象,这在DAO或SQL助手中实际上非常罕见,因为在父对象内部保留了引用,所以消耗与第一个完全相同的内存

我在这种情况下的建议是使用第一个。

答案 1 :(得分:1)

你可以很容易地找到

memory_get_peak_usage ()

请参阅http://php.net/manual/function.memory-get-peak-usage.php