Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> composite - referencje
Cysiaczek
post
Post #1





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Nie będę tłumaczył wzorca, tylko skupie się na clue sprawy.

Mam powiedzmy 5-o elementową tablicę, z której pobieram jeden klucz i tworzę obiekt. Reszta "kolegów" z tablicy zostaje dodana do tego obiektu jako obiekty tego samego typu. Żebym mógł w czasie wykonania programu zmienić obiekt na którym pracuję, to do każdego z tych obiektów muszę również przekazać referencje pozostałych 4
Kompozyt przechowuje n*(n-1) referencji do innych obiektów tego samego typu.
Czyli mając 5 obiektów mam 20 referencji, przy 10 jest już 90 itd. Jak duże obciążenie może to wygenerować? Warto?

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Referencje są bardzo "lekkie" dla systemu, nie zużywają ani pamięci, ani mocy procesora.
Przy ich dużej ilości jedynym problemem jaki może się pojawić, to usuwanie obiektów, które są kasowane z pamięci dopiero wtedy, gdy usunięte zostaną wszystkie referencje tego obiektu.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
cicik
post
Post #3





Grupa: Zarejestrowani
Postów: 219
Pomógł: 5
Dołączył: 18.07.2006
Skąd: Piekary Śląskie

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


Dołożyłbym do tego jeszcze jeden problem.
Na php.net jakiś czas temu pojawiła się propozycja projektu w ramach google summer of code.
Polegać on miał na tym aby poprawić phpowego garbage collectora tak aby poprawnie zwalniał pamięć po obiektach tworzących cykl.

Wnioskuję stąd, że obecny garbage collector sobie z tym nie radzi.
W związku z tym, jeżeli będziesz miał trzy obiekty:
pierwszy ma referencję do drugiego, drugi do trzeciego i trzeci do pierwszego to grabage collector nie zwolni pamięci zajmowanej przez te obiekty nawet jeżeli z zewnątrz cyklu nie ma do nich referencji.
Taka właśnie sytuacja występuje u Ciebie.

Poza tym to nie prawda, że referencja nie zajmuje pamięci - zajmuje, na 32-bitowych maszynach dokładnie 4 bajty* .


* Dane dla języków kompilowanych (C, C++, Delphi, etc.) - nie wiem dokładnie jak jest w PHP, może to jeszcze w nim jest jakoś owijane w dodatkowe dane więc wtedy zajmować będzie więcej.


--------------------
CMS dla Twojej firmy
Wojciech Małota
Go to the top of the page
+Quote Post
DeyV
post
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




>Poza tym to nie prawda, że referencja nie zajmuje pamięci
cicik - smile.gif - a szkoda - już miałem nadzieję, że chociaż to jest za darmo winksmiley.jpg

A tak na poważnie - jasne, że coś zajmują, i jak sądzę - więcej niż w C lub Delphi, jednak nie jest to wielkość znacząca.

Swoją drogą - ciekawe, jak Garbage radzi sobie w przypadku wykorzystania destruktorów, usuwających wewnętrzne związki.
Warto by bylo jakoś to sprawdzić, jednak nie mam coś zaufania to pomiarów zużytej pamięci wykonywanych przez Xdebug pod windowsem.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
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: 21.08.2025 - 04:18