gettype () undichter Speicher
-
11-10-2019 - |
Frage
Ich bin mit der twitter-Asynchron-Bibliothek einige tun oauth Anrufe twittern, aber letztlich wird viel Speicher verbraucht wird. Ich habe versucht, die xdebug Execution Trace laufen und das ist, wo ich die Erinnerung fühlen geleckt zu werden.
json_decode()
verwendet 47077232 bytes. Okay. Das ist in Ordnung.
Aber gettype()
? Warum soll dies auch sein mit ähnlicher Speichermenge?
Wie dies verhindert werden könnte?
Das Skript läuft in einer Schleife und die Speichernutzung ständig nach oben. Ich verwende gc_collect_cycles()
an Zahl der Plätze und es zeigt Verbesserungen. Aber diese eine, ich kann nicht verstehen, warum dies geschehen soll.
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
Lösung
Von der Dokumentation :
Verwenden Sie niemals gettype (), um Test für eine bestimmte Art, da der zurückgegebene String Thema in einer zukünftigen Version zu ändern sein. Darüber hinaus ist es langsam zu, da es String-Vergleich beinhaltet.
Verwenden Sie stattdessen die is_ * Funktionen.
z. Verwendung is_array
, is_string
etc.