![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 5.05.2004 Skąd: Starachowice Ostrzeżenie: (0%) ![]() ![]() |
Witam was!
Czy spotkał się ktoś z was z bardzo niecodziennym problemem tzn. Podczas używania buforowania wyjścia oraz definiowania w metodzie klasy funkcji lambda, nieoczekiwanie po wykonaniu wielu wielu pętli znika nagle pamięć dostępna dla skryptu? Jest to dla mnie bardzo dziwne zjawisko, bo poniższą klasę która napisałem aby ukazać problem który zauważyłem wykorzystuję jako template, gdzie przed include pliku php (szablon) robię dwie funkcje lamba, które służą mi do komunikacji z klasą języków itp. Aby zrozumieć w czym rzecz przedstawiam poniżej, kod w którym owy błąd się pojawia.
Poniżej przedstawiam wynik obliczeń (pierwsze uruchomienie): CODE Memory limit: 128M Usage: 0.1 Peak:0.1 Results after remove lambda Memory limit: 128M Usage: 8.4 Peak:8.5 Kolejne uruchomienia skryptu: CODE Memory limit: 128M
Usage: 0 Peak:0 Results after remove lambda Memory limit: 128M Usage: 8.4 Peak:8.5 Ten post edytował pearl1985 24.08.2009, 13:40:41 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 109 Pomógł: 9 Dołączył: 12.03.2007 Skąd: kraków/tarnobrzeg/baranów/suchorzów Ostrzeżenie: (0%) ![]() ![]() |
Istotnie to jest dziwne. Ale to raczej nie zależy od funkcji buforujących bo usunąłem je i otrzymałem bardzo podobne rezultaty. Tylko że u mnie na wyjściu wyniki były następujące :
Results after remove lambda Memory limit 128M Usage 12 Peak: 12 pogooglowałem i znalazłem komentarz z manuala : Beware when using anonymous functions in PHP as you would in languages like Python, Ruby, Lisp or Javascript. As was stated previously, the allocated memory is never released; they are not objects in PHP -- they are just dynamically named global functions -- so they don't have scope and are not subject to garbage collection. So, if you're developing anything remotely reusable (OO or otherwise), I would avoid them like the plague. They're slow, inefficient and there's no telling if your implementation will end up in a large loop. Mine ended up in an iteration over ~1 million records and quickly exhasted my 500MB-per-process limit. Chyba lepiej będzie jak zrezygnujesz z funkcji anonimowych i zastąpisz to jakimś innym rozwiązaniem. Ten post edytował szagi3891 25.08.2009, 22:20:47 -------------------- Każdy z was jest łodzią w której Może się z potopem mierzyć Cało wyjść z burzowej chmury Musi tylko w to uwierzyć! |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.06.2025 - 22:31 |