2011-01-14 3 views
0

나는 twitter-async library을 사용하여 트위터에 대한 oauth 호출을 수행하지만 궁극적으로 많은 메모리가 소모되고 있습니다. xdebug 실행 추적을 실행 해 보았습니다. 그리고 이것은 메모리가 누수되고 있다고 느낍니다.gettype() 메모리 누수

json_decode()은 47077232 바이트를 사용합니다. 괜찮아. 이건 괜찮아.

그러나 gettype()? 왜 비슷한 양의 메모리를 사용해야합니까?

어떻게 예방할 수 있습니까?

스크립트가 루프에서 실행되고 메모리 사용이 계속 증가합니다. 나는 장소 수에 gc_collect_cycles()를 사용하고 있으며 개선을 보이고 있습니다. 하지만이 일이 왜 일어날 지 이해할 수 없습니다. documentation에서

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

gettype이 메모리를 유출하는지도 모르겠지만 gettype이 지옥처럼 느리다는 것을 알고 있습니다! gettype에서 is_ * –

+0

으로 마이그레이션 할 수 있습니까? 사용중인 명령을 정확하게 표시 할 수 있습니까? –

+0

@ 페카 당신을 잡을 수 없었습니다. 정확히 무엇을 원하니? – kapeels

답변

5

:

반환 문자열은 앞으로의 버전에서 변경 될 수 있기 때문에, 특정 유형의 테스트 getType로()를 사용하지 마십시오. 또한 문자열 비교가 포함되어 있으므로 속도가 느립니다.

대신 is_ * 함수를 사용하십시오.

is_array, is_string 등을 사용하십시오.

+0

결과는 동일합니다. is_object를 사용하면 메모리 사용량이 전혀 줄어들지 않습니다. – kapeels