Heim >Backend-Entwicklung >PHP-Problem >Wie benutze ich Generatoren für eine speichere Effektiv-Iteration in PHP?
Ausbeute
auftritt, pausiert der Generator die Ausführung und gibt den nachgegebenen Wert zurück. Wenn der Generator das nächste Mal aufgerufen wird (z. B. unter Verwendung eines foreach
Schleife), wird die Ausführung wieder aufgenommen. }} foreach (numberGenerator () als $ number) {echo $ nummer. & quot; & quot ;; // Ausgabe: 1 2 3 4 5} Dieser Generator speichert nicht alle Zahlen in einem Array; Es produziert sie nach Bedarf einzeln. Komplexere Generatoren können Daten aus Dateien, Datenbanken oder anderen Quellen lesen und Werte ergeben, die verarbeitet werden, wodurch ein kleiner Speicherpfundwerk beibehalten wird. Sie können auch Ertrag von
zum Delegieren der Iteration an einen anderen Generator verwenden und komplexe Iterationen leichter zu verwalten. Wenn Sie sich mit großen Datensätzen befassen, kann das Laden des gesamten Datensatzes in ein Array einen erheblichen Speicher verbrauchen, was möglicherweise zu Leistungsengpässen oder sogar Speicherschöpfung führt. Generatoren vermeiden dies, indem sie Werte auf Bedarf generieren und die Speicherverwendung erheblich verringern. Die Leistungsverbesserung wird mit zunehmender Datensatzgröße stärker ausgeprägt. Darüber hinaus können Generatoren die Leistung verbessern, indem sie eine faule Bewertung ermöglichen-Berechnungen werden nur dann durchgeführt, wenn ein Wert tatsächlich angefordert wird, anstatt alles im Voraus vorzubereiten. Ihre Fähigkeit, die Werte einzeln zu ergeben, bedeutet, dass zu einem bestimmten Zeitpunkt nur ein kleiner Teil der Daten im Speicher gehalten werden muss. Dies ist für Datensätze von entscheidender Bedeutung, die zu groß sind, um bequem in den RAM zu passen. Anstatt die gesamte Datei in ein Array zu laden, können Sie einen Generator verwenden, um die Dateizeile für Zeile zu lesen und zu verarbeiten. Jede Zeile wird einzeln geliefert, wodurch verhindert wird, dass die gesamte Datei in den Speicher geladen wird. Dieser Ansatz reduziert dramatisch den Speicherverbrauch und vermeidet potenzielle Speicherfehler. In ähnlicher Weise können Sie Generatoren verwenden, um Daten aus Datenbanken, Netzwerkströmen oder anderen großen Datenquellen effizient zu verarbeiten. Hier ist ein Beispiel für einen Generator, der eine große Dateizeile für Zeile liest:
<code class="php"> FunktionsprozesslargeFile ($ Dateiname) {$ Handle = fopen ($ Dateiname, 'r'); if ($ Handle === false) {neue Ausnahme werfen ("konnte keine Datei öffnen: $ Dateiname"); } while (($ line = fGets ($ Handle))! == false) {Rendite trim ($ line); // jede Linie nach dem Trimmen von Whitespace} fcLose ($ Handle); } foreach (processLargeFile ('my_large_file.txt') als $ line) {// prozessieren jede Zeile einzeln echo & quot; Verarbeitungszeile: & quot; . $ line. Php_eol; } </code>
Dieser Generator öffnet die Datei, liest die Zeile per Zeile mit fGets ()
und ergibt jede Zeile. Die Funktion trim ()
entfernt die Führung/Verlauf von Whitespace. Nach der Verarbeitung aller Zeilen ist die Datei geschlossen. Dadurch wird vermieden, dass der gesamte Dateiinhalt im Speicher bleibt. Sie können diesen Ansatz für andere Datenströme anpassen, z. B. Netzwerkverbindungen oder Datenbankergebnis -Sets, indem Sie fGets ()
durch geeignete Funktionen zum Lesen von Daten aus diesen Quellen ersetzen. Die Fehlerbehandlung, wie in diesem Beispiel mit der -Ausnahme
gezeigt, ist für eine robuste Stream -Verarbeitung von entscheidender Bedeutung.
Das obige ist der detaillierte Inhalt vonWie benutze ich Generatoren für eine speichere Effektiv-Iteration in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!