getType()漏れメモリ
-
11-10-2019 - |
質問
私は使用しています Twitter-Asyncライブラリ TwitterへのOAUTH呼び出しを行うには、最終的には多くのメモリが使い果たされています。 Xdebug実行トレースを実行しようとしましたが、これはメモリが漏れていると感じる場所です。
json_decode()
47077232バイトを使用しています。わかった。これで問題ありません。
だが gettype()
?なぜこれも同様の量のメモリを使用する必要があるのですか?
これをどのように防ぐことができますか?
スクリプトはループで実行され、メモリの使用量が増加し続けます。私は使用しています gc_collect_cycles()
場所の数で、それは改善を示しています。しかし、これは、なぜこれが起こるべきか理解できません。
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
解決
から ドキュメンテーション:
返された文字列は将来のバージョンで変更される可能性があるため、getType()を使用して特定のタイプをテストしないでください。さらに、文字列の比較が含まれるため、それも遅くなります。
代わりに、IS_*関数を使用します。
例:使用 is_array
, is_string
等
所属していません StackOverflow