gettype () mémoire fuit
-
11-10-2019 - |
Question
J'utilise le bibliothèque twitter-async pour faire un peu OAuth appels à Twitter, mais en fin de compte, est utilisé beaucoup de mémoire vers le haut. Je courais la trace essayé d'exécution xdebug et c'est là où je sens la mémoire est une fuite.
json_decode()
utilise 47077232 octets. D'accord. Ceci est très bien.
Mais gettype()
? Pourquoi cela aussi être en utilisant la même quantité de mémoire?
Comment cela pourrait-il être évité?
Le script est exécuté dans une boucle et l'utilisation de la mémoire ne cesse d'augmenter. J'utilise gc_collect_cycles()
au nombre de places et il montre une amélioration. Mais celui-ci, je ne peux pas comprendre pourquoi cela se produit.
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
La solution
Ne jamais utiliser gettype () pour tester un certain type, étant donné que la chaîne retournée est sujette au changement dans une version future. De plus, il est trop lent, car il implique la comparaison de chaînes.
Au lieu de cela, utilisez le is_ *.
par exemple. utilisation is_array
, is_string
etc.