Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Czyszczenie pamięci po wykonanej operacji na tablicy?
kukix
post
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam.

Zastanawiam się nad jedną rzeczą, co robicie z tablicą po wykonaniu na niej operacji?

Mam tablice w postaci:
  1. <?php
  2. $param_value[9][127] = 'AAAAA';
  3. $param_value[9][128] = 'BBBBB';
  4. $param_value[9][129] = 'CCCCC';
  5. //.. itd x 4000 pozycji
  6. ?>


nastepnie odczytuje ta tablice poprzez:
  1. <?php
  2. if (is_array($param_value[9])) {
  3.    reset(@$param_value[9]);
  4.    while (list($id,$value) = each($param_value[9])) {
  5.      print($id.' '.$value);
  6.    }
  7.  }
  8. //uzywam while(), ponieważ foreach() tworzy kopie tablicy w pamieci serwera
  9. ?>


I co teraz? Czy nie powinno się po zastosowanej pętli wyczyścić pamięci serwera z tej talicy?

Podłączyłem do skryptu plik z tą tablicą i pokazał mi się komunikat:
Cytat
Fatal error: Out of memory (allocated 77070336) (tried to allocate 40 bytes) in /index.php on line 428


Czy serwer ma zapchaną pamieć przez poprzednie wykonania tego skryptu?

Prosze o pomoc.
Będe wdzięczny za wszelkie wypowiedzi.

Ten post edytował kukix 27.04.2009, 18:15:34
Go to the top of the page
+Quote Post
lashus
post
Post #2





Grupa: Zarejestrowani
Postów: 39
Pomógł: 9
Dołączył: 12.04.2008

Ostrzeżenie: (0%)
-----


Wątpię by to pomogło, aczkolwiek możesz spróbować:

Kod
$param_value = array();
Go to the top of the page
+Quote Post
marcio
post
Post #3





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Hmm sprobuj uzyc unset() na wszystkie elementy tablicy oczywiscie po poprzednich operacjach na nich.


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
#luq
post
Post #4





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Tablicę się kasuje stosując unset na całej tablicy, a nie ma poszczególnych elementach.

  1. <?php
  2. $arr = array(
  3.    'a' => 'foo', 'b' => 'bar'
  4. );
  5. unset( $arr );
  6. ?>


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
okitoki
post
Post #5





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


no cóż jak ci się już znudzi tablica zawsze możesz zrobić to tak
Kod
<?php
$arr = array(
    'a' => 'foo', 'b' => 'bar'
);
$arr = array();
?>


--------------------
Go to the top of the page
+Quote Post
marcio
post
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
Tablicę się kasuje stosując unset na całej tablicy, a nie ma poszczególnych elementach.

Co ty za glupoty piszesz?Mozna usuwac poszczegolny elemnty tablicy za pomoca jego index'u.

P.S a jak usuwasz dana zmienna sesyjna?

P.S2 http://it2.php.net/unset 1 exaple.

Ten post edytował marcio 28.04.2009, 10:09:32


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
#luq
post
Post #7





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Cytat(marcio @ 28.04.2009, 11:09:05 ) *
Co ty za glupoty piszesz?Mozna usuwac poszczegolny elemnty tablicy za pomoca jego index'u.

Źle mnie zrozumiałeś. Chyba oczywistym jest że można lecieć unsetem po każdym indeksi/kluczu ale jeśli chce się skasować CAŁĄ tablicę to chyba lepiej użyć unset( $array ). Chyba się zgodzisz ze mną, że takie rozwiązanie jest lepsze.
Może trochę źle się wyraziłem ale pomyśleć też można.


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
bim2
post
Post #8





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


#luq, to ty źle zrozumiałeś istotę problemy. Kończy się pamięć w czasie działania skryptu. Więc trzeba po kolei usuwać elementy tablicy, po wykonaniu na nich operacji.
  1. <?php
  2. if (is_array($param_value[9])) {
  3.   foreach($param_value[9] AS $k => $v) {
  4.     list($id,$value) = $v;
  5.     print($id.' '.$value);
  6.     unset($param_value[9][$k]);
  7.   }
  8. }
  9. ?>


Ten post edytował bim2 28.04.2009, 15:39:07


--------------------
Go to the top of the page
+Quote Post
#luq
post
Post #9





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Cytat(bim2 @ 28.04.2009, 16:18:52 ) *
#lug, to ty źle zrozumiałeś istotę problemy. Kończy się pamięć w czasie działania skryptu. Więc trzeba po kolei usuwać elementy tablicy, po wykonaniu na nich operacji.

A to przepraszam, mój błąd wstydnis.gif

PS. luq


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
okitoki
post
Post #10





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


Cytat(bim2 @ 28.04.2009, 16:18:52 ) *
#luq, to ty źle zrozumiałeś istotę problemy. Kończy się pamięć w czasie działania skryptu. Więc trzeba po kolei usuwać elementy tablicy, po wykonaniu na nich operacji.


smile.gif jak sprawdzić ile mamy jeszcze pamięci na skrypt, mówiąc szczerze w PHP jeszcze z tym nie miałem problemu, w innych językach to norma, przy zmiennych dynamicznych i OOP

Ten post edytował okitoki 28.04.2009, 20:11:54


--------------------
Go to the top of the page
+Quote Post
Crozin
post
Post #11





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Ilość dostępnej pamięci (dostępne w php.ini) minus aktualnie zużywana memory_get_usage" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 06:57