Odnosi się to do aplikacji PHP 5.3 Cli, która przetwarza wiele danych w złożony sposób, trwające wiele godzin. Ktoś odkrył, że wyłączenie zbierania śmieci sprawiło, że działało znacznie szybciej (może aż 50%).Dlaczego moduł do zbierania śmieci zwolnił wydajność i jak zarządzać pamięcią bez tego?
Jedyny artykuł, na który natknąłem się na ten wynik, to http://derickrethans.nl/collecting-garbage-performance-considerations.html. Nie jestem pewien, czy podążam za nim w całości, ale wydaje się sugerować, że dotyczy to tylko kodu z dużą liczbą odwołań cyklicznych.
Czy ktoś może rzucić trochę światła na to?
Ponadto, skoro wyłączyliśmy gc, czy istnieje sposób ręcznego zmniejszenia pamięci? Używanie unset() zostało zasugerowane. Szybki test wykazał, że osiemdziesiąt bajtów jest zwalnianych przez unset() niezależnie od wielkości obiektu. Sugeruje to, że jest to po prostu zaburzenie odniesienia, co jest potwierdzone przez to, co przeczytałem online. Czy mam rację, sądząc, że te osiemdziesiąt bajtów i tak zostanie uwolnione, nawet bez zbędnego zbierania śmieci, kiedy zmienna wypadnie poza zasięgiem?
Myślałem, że to może być przypadek, ale instrukcja jest bardzo niejasna. Więc, jest to normalne niemożliwe do wyłączenia? (Nie, że chcę, po prostu zainteresowany) – naomi
@naomi Tak, nie można go wyłączyć. Nie ma też powodu (wpływ jest bardzo mały) i dlatego, że nie możesz zwolnić pamięci z poziomu samego PHP ('unset()' nie robi tego) będziesz miał ogromny problem: D – KingCrunch