您可以在下面看到两个简化的片段,它们的结果没有变化。
模式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 周期方面,对象克隆(模式 2)是否比从头开始创建对象(模式 1)提供了性能改进?还要考虑大量的固定属性(在实例之间不会改变)和大量的循环。
更新:我需要在每个循环中使用不同的对象实例。我添加saveToDatabase
了对示例的调用以使其类似,例如,让它为消息提供一个 ID。;)