GetType () perde la memoria
-
11-10-2019 - |
Domanda
Sto utilizzando il biblioteca twitter-asincrone per fare un po ' OAuth chiamate a Twitter, ma in ultima analisi, un sacco di memoria viene utilizzato su. Ho provato a fare funzionare la traccia di esecuzione xdebug e questo è dove mi sento la memoria è sempre trapelato.
json_decode()
sta usando 47077232 byte. Va bene. Questo va bene.
Ma gettype()
? Perché dovrebbe essere anche questo utilizza simile quantità di memoria?
Come poteva essere evitato?
Lo script viene eseguito in un ciclo e l'utilizzo della memoria continua a salire. Sto utilizzando gc_collect_cycles()
al numero di posti e sta mostrando un miglioramento. Ma questo, non riesco a capire il motivo per cui questo accade.
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
Soluzione
Non utilizzare mai GetType () per testare per un certo tipo, dal momento che la stringa restituita può essere soggetto a modifiche in una versione futura. Inoltre, è troppo lento, in quanto si tratta di confronto di stringa.
Al contrario, utilizzare l'is_ * funzioni.
es. uso is_array
, is_string
etc.