Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> tworzenie tablic, wydajność
zzeus
post
Post #1





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

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


Witam,
może ktoś się orientuje czy jest jakaś różnica w wydajności jak chodzi o tworzenie tablic na dwa poniższe sposoby:
  1. $_arrTemp["val1"] = "val1";
  2. $_arrTemp["val2"] = "val2";
  3. $_arrTemp["val3"] = "val3";
  4. ...

  1. $_arrTemp = array(
  2. "val1" => "val1",
  3. "val2" => "val2",
  4. "val3" => "val3"
  5. );

Go to the top of the page
+Quote Post
Kocurro
post
Post #2





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Witaj,

Zawsze możesz samemu sprawdzić:

- w tym celu robisz pętlę powiedzmy 10000 iteracji
- zapisujesz czas przed iteracjami i po iteracjach
- wyznaczasz różnicę czasu

Pamiętam by eksperyment powtórzyć kilka/kilkanaście razy by zniwelować czynnik zewnętrzny. Otrzymane wyniki dobrze jest jakoś obrobić rozsądnie.

Pozdrawiam serdecznie,
Łukasz
Go to the top of the page
+Quote Post
darko
post
Post #3





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Wygrzebane z manuala w przykładach:
Cytat
If you are creating an array with a large number of static items, you will find serious performance differences between using the array() function and the $array[] construct. For example:
<?
// Slower method
$my_array = array(1, 2, 3, 500);

// Faster method
$my_array[] = 1;
$my_array[] = 2;
$my_array[] = 3;
$my_array[] = 500;
?>

[za:] http://php.net/manual/en/function.array.php
Tylko teraz kwestia czy podstawianie wartości pod konkretne klucze działa w podobny sposób, jak konstrukcja wstawiania kolejnego elementu? Inna sprawa, że przykład nie dotyczy tablic asocjacyjnych. Trzeba byłoby zerknąć w źródła i sprawdzić jaka jest różnica (jeśli w ogóle jakaś jest).

Ten post edytował darko 17.02.2010, 12:48:08
Go to the top of the page
+Quote Post
zzeus
post
Post #4





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

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


Pokusiłem się o dwa testy:
  1. for($i = 0; $i < 10000; $i++)
  2. {
  3. $_arrTemp["val1"] = "val1";
  4. $_arrTemp["val2"] = "val2";
  5. $_arrTemp["val3"] = "val3";
  6. }
  7.  
  8. for($i = 0; $i < 10000; $i++)
  9. {
  10. $_arrTemp = array(
  11. "val1" => "val1",
  12. "val2" => "val2",
  13. "val3" => "val3"
  14. );
  15. }

w tym przypadku nieco szybsza jest metoda 1.

  1. for($i = 0; $i < 10000; $i++)
  2. {
  3. $_arrTemp[$i]["val1"] = "val1";
  4. $_arrTemp[$i]["val2"] = "val2";
  5. $_arrTemp[$i]["val3"] = "val3";
  6. }
  7.  
  8. for($i = 0; $i < 10000; $i++)
  9. {
  10. $_arrTemp[$i] = array(
  11. "val1" => "val1",
  12. "val2" => "val2",
  13. "val3" => "val3"
  14. );
  15. }

w tym przypadku szybsza jest metoda 2

Myślicie że te testy dają wiarygodne wyniki ?
Go to the top of the page
+Quote Post
masahuku
post
Post #5





Grupa: Zarejestrowani
Postów: 42
Pomógł: 4
Dołączył: 11.12.2009

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


Myślę, że są wiarygodne ale... po co ? I tak i tak jest wydajnie, a do projektów gdzie taka subtelna różnica miałaby sens to nie mówilibyśmy o php (IMG:style_emoticons/default/smile.gif) .

Myślę że w tym temacie ważniejsze jest co dla nas w konkretnym przypadku jest wygodniejsze.

Ten post edytował masahuku 17.02.2010, 13:24:44
Go to the top of the page
+Quote Post
zzeus
post
Post #6





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

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


Cytat(masahuku @ 17.02.2010, 13:22:42 ) *
Myślę, że są wiarygodne ale... po co ?


Ciekawość (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.12.2025 - 18:19