2011-01-14 9 views
0

Ich benutze die twitter-async library, um einige oauth Anrufe an Twitter zu tun, aber letztlich wird eine Menge Speicher aufgebraucht. Ich habe versucht, den xdebug-Ausführungs-Trace auszuführen, und hier fühle ich, dass der Speicher durchgesickert ist.gettype() undichte Speicher

json_decode() verwendet 47077232 Bytes. Okay. Das ist in Ordnung.

Aber gettype()? Warum sollte das auch eine ähnliche Menge an Speicher verwenden?

Wie könnte dies verhindert werden?

Das Skript wird in einer Schleife ausgeführt und die Speichernutzung steigt weiter. Ich benutze gc_collect_cycles() an der Anzahl der Orte und es zeigt Verbesserung. Aber dieses hier kann ich nicht verstehen, warum das passieren sollte.

724.1772 47077232 +2118720    -> json_decode() /var/www/html/includes/classes/twitter/EpiTwitter.php:230 
    724.1926 49157104 +2079872    -> gettype() /var/www/html/includes/classes/twitter/EpiTwitter.php:232 
    724.1927 49157104  +0    -> property_exists() /var/www/html/includes/classes/twitter/EpiTwitter.php:240 
    724.1927 49153520 -3584  -> EpiTwitterJson->__destruct() /var/www/html/includes/classes/twitter/EpiTwitter.php:0 
    724.1949 46714808 -2438712  -> in_array() /var/www/html/cron.php:156 
+1

Ich weiß nicht, wenn gettype Speicher verliert aber ich weiß sicher, dass gettype langsam wie die Hölle ist! Vielleicht können Sie von gettype zu is_ * –

+0

migrieren Können Sie den genauen Befehl zeigen, den Sie verwenden? –

+0

@Pekka Konnte dich nicht bekommen. Was genau willst du? – kapeels

Antwort

5

Vom documentation:

Nie gettype() verwenden, für eine bestimmte Art zu testen, da der zurückgegebene String kann sich in einer zukünftigen Version ändern. Außerdem ist es auch langsam, da es einen String-Vergleich beinhaltet.

Verwenden Sie stattdessen die Funktionen is_ *.

z.B. Verwenden is_array, is_string usw.

+0

Das Ergebnis ist das gleiche, die Verwendung von is_object reduziert die Speicherauslastung überhaupt nicht. – kapeels