![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Zastanawiam się ostatnio nad takim zagadnieniem.
Mam w systemie dużą (kilkaset elementów) listę obiektów tego samego typu, z których każdy ma swoją unikalną nazwę. Każdy z nich spełnia jednak różne zadania, w związku z czym muszę je mieć dostępne w kilku miejscach równocześnie. Oznacza to, że mam je zarejestrowane w tablicy podstawowej, chciałbym jednak mieć również wydzielone specjalne tablice pomocnicze, przechowujące informacje o obiektach konkretnie mnie interesujących. Tu jednak pojawia się pytanie. Czy taka tablica powinna zawierać liste identyfikatorów obiektów ( typu 'NazwaObiektu1') czy też lepiej by było, by zawierała od razu referencje do tych obiekcików. I nie chodzi tu o funkcjonalność, a o wydajność i zużycie pamięci. Czy ktoś z Was robił kiedyś testy tego typu? Ja niestety - nie mogę tego zrobić, ponieważ nie mam dostępu do maszyny z biblioteką zajmującą się pomiarem zużycia pamięci przez php. przykład:
rozwiązanie pierwsze (identyfikatory):
rozwiązanie drugie (referencje):
-------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Zadaj sobie pytanie w jaki sposob bedziesz sie odwolywal do konkretnego elementu z listy pomocniczej - $aListaPomocnicza['79'] - czy raczej zdecydujesz sie na klucze w postaci tekstowej pozwalajace latwiej zidentyfikowac konkretny obiekt.
Jesli bedziesz sie odwolywal przy pomocy indeksow liczbowych to Twoj problem pozostaje nierozstrzygniety gdyz nie potrafie Ci powiedziec co zajmuje wiecej miejsca w pamieci - nazwa obiektu czy wskaznik do niego. Jesli chcesz miec mozliwosc wskazywania konkretnego obiektu po jego nazwie to z logicznego punktu widzenia rozwiazanie pierwsze wydaje się być najwlasciwsze. -------------------- bigZbig (Zbigniew Heintze) | blog.heintze.pl
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Niestety - tak jak napisałem - nie chodzi tu o funkcjonalność, gdyż lista pomocnicza ma być tylko i wyłącznie iterowana - nie są więc w niej potrzebne klucze.
Dlatego właśnie pojawiło się pytanie - czy lepiej jest przechowywać tablicę stringów (identyfikatorów) czy referencji. -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
Ja zrobiłbym to na referencji.. kto wie.. z nazwami coś się może wysypać... a referencją zwalasz wszystko na system. A skoro to jeszcze ma byc iterowane
![]() -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Wyniki dla 80000 obiektow:
Kod list creation : 104.79511 MB referencing by reference : 03.55194 MB referencing by reference : 00.14405 s list creation : 104.79511 MB referencing by key name STRING : 05.38295 MB referencing by key name STRING : 00.28383 s list creation : 104.79511 MB referencing by key name INTEGER : 04.77258 MB referencing by key name INTEGER : 00.19460 s Czyli * ilosc zajmowanego miejsca (im mniej tym lepiej): referencje < integer < string Poza tym same obiekty zajmuja ok. 25x wiecej niz tablia z referencjami/indeksami do tych obiektow * Szybkosc dostepu do obiektow (im mniej tym lepiej): referencje < integer < string Wniosek: referencje sa najszybsze i zajmuja najmniej miejsca, choc w porownaniu z tablica obiektow kazda metoda zajmuje duzo mniej miejsca. PS. Nie nalezy uruchamiac trzech testow za jednym razem, php osiagaja granice dostepnej pamieci, usuwa niepotrzebne obiekty/dane przez co po utworzeniu tablicy mozemy otrzymac wieksza ilosc wolnej pamieci niz przed (stare obiekty usuniete w czasie tworzenia nych --> zuzycie pamieci ujemne ![]() Test:
--- sorry za taki burdel w kodzie, ale spojrzcie na zegar ![]() -------------------- Nie lubię jednorożców.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 10.05.2025 - 07:35 |