아래의 두 가지 간단한 스 니펫이 결과가 다르지 않은 것을 볼 수 있습니다.프로토 타입 개체를 복제하면 처음부터 개체를 만드는 것보다 성능이 향상됩니까?
$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);
개체 복제 (패턴 2)를 처음부터 객체를 생성 통해 성능 향상을 제공을 (않습니다 프로토 타입 객체 클로닝
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 :
패턴 (1)는, 처음부터 개체 패턴 1) 메모리 사용량, 가비지 수집 및/또는 CPU주기 측면에서? 고정 된 속성 (인스턴스간에 변경되지 않음)과 루프 수가 많다는 것도 고려하십시오.
업데이트 : 각 루프마다 다른 개체 인스턴스가 필요합니다. 나는 예를 들어 saveToDatabase
호출을 추가하여 메시지에 ID를 부여하는 것과 비슷하게 만든다. ;)
답변 해 주셔서 감사합니다. 제 경우에는 두 개의 서로 다른 인스턴스가 필요합니다. 이 요구 사항을보다 잘 반영하도록 질문을 업데이트했습니다. 그러나 '복제본'벤치 마크에 대한 귀하의 참조가 제 질문에 매우 잘 응답 할 것이라고 생각합니다. 새로운 객체를 만드는 것보다 복제하는 것이 좋습니다. –
Clone은 생성자를 찾아서 실행할 필요가 없습니다. 생성자가 무거울수록 혜택이 커집니다. – tacone
@tacone 그것은 마술 __clone()을 찾아야 만합니다. 따라서 실행 부분은 다양합니다. 모든 것은 클래스에 달려 있습니다. – IMSoP