【发布时间】:2013-07-11 21:30:24
【问题描述】:
您可以在下面看到两个简化的 sn-ps,它们的结果没有变化。
模式 1,从头开始的对象:
foreach ($recipients as $recipient) {
$message = new Message();
$message->setBody("This is the body of the message.");
$message->setRecipient($recipient);
$transport->sendMessage($message);
$persister->saveToDatabase($message); // Updated line
unset($message);
}
模式2,克隆原型对象:
$prototype = new Message();
$prototype->setBody("This is the body of the message.");
foreach ($recipients as $recipient) {
$message = clone $prototype;
$message->setRecipient($recipient);
$transport->sendMessage($message);
$persister->saveToDatabase($message); // Updated line
unset($message);
}
unset($prototype);
在内存使用、垃圾收集和/或 CPU 周期方面,与从头开始创建对象(模式 1)相比,对象克隆(模式 2)是否提供了性能改进?还要考虑大量的固定属性(在实例之间不会改变)和大量的循环。
更新:我需要在每个循环中使用不同的对象实例。我在示例中添加了saveToDatabase 调用以类似于它,例如让它为消息提供一个ID。 ;)
【问题讨论】: