Sie können zwei vereinfachte Schnipsel unten sehen, dass nicht in ihrem Ergebnis variieren. 1Bietet das Klonen eines Prototypobjekts eine Leistungsverbesserung gegenüber der Neuanlage von Objekten?
Muster, Objekte von Grund auf:
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);
}
Muster 2, einen Prototypobjekt Klonieren:
$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);
Ist das Objekt Klonieren (Muster 2) liefern Leistungsverbesserungen gegenüber Objekten von Grund auf neu erstellen (Muster 1) in Bezug auf Speichernutzung, Speicherbereinigung und/oder CPU-Zyklen? Berücksichtigen Sie auch eine hohe Anzahl von festen Eigenschaften (die sich zwischen den Instanzen nicht ändern) und eine hohe Anzahl von Schleifen.
Update: Ich brauche verschiedene Objektinstanzen in jeder Schleife. Ich fügte saveToDatabase
Anruf zu den Beispielen hinzu, um dem zu ähneln, lassen Sie es zum Beispiel eine Identifikation der Mitteilung geben. ;)
Vielen Dank für Ihre Antwort. In meinem Fall sind zwei verschiedene Instanzen erforderlich. Ich habe meine Frage aktualisiert, um diese Anforderung besser widerzuspiegeln. Aber ich denke, Ihr Hinweis auf den "Klon" -Benchmark wird meine Frage ziemlich gut beantworten: besser klonen als neue Objekte erstellen. –
Clone muss nicht nach einem Konstruktor suchen und ihn ausführen. Je schwerer der Konstrukteur, desto größer der Nutzen. – tacone
@tacone Es muss allerdings für eine magische __clone() sehen, es ist also nur der Ausführungsteil, die variiert und hängt alles von der Klasse. – IMSoP