![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 4 Dołączył: 5.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam, postanowiłem przetestować czas wykonywania skryptu dla klasy skonstruowanej wg. wzorca Singleton, wywoływanej poprzez metode statyczną która decyduje czy należy tworzyć nowy obiekt klasy. Wywoływałem tą klasę również w tradycyjny sposób. Czas wykonywania skryptu wyglądał
następująco : Kod Skrypt wykonany w czasie: 1.485986 sekundy (tradycyjnie wywołany obiekt) Skrypt wykonany w czasie: 2.203427 sekundy(wg. singleton) Byc moze zle implementuje ten wzorzec w swojej aplikacji wiec podaje poniżej kod :
Klasę wywołuję wg singleton tym kodem:
A tak tworze obiekt klasy w tradycyjny sposób(wg. moich testów ten sposób jest szybszy)
Czy może mi ktoś wyjaśnić dlaczego kod wg singleton jest wykonywany wolniej i kiedy warto w swoich aplikacjach implementować ten wzorzec ? Z góry dzieki za pomoc. -------------------- torrenty
|
|
|
![]()
Post
#2
|
|
![]() Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
Roznica jest nie wielka.
Singleton jak sama nazwa wskazuje jest uzywany tam gdzie w calej aplikacji musi byc tylko jedna wersja obiektu i tego trzeba sie trzymac. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Dodam tylko, że funkcjonalność tego wzorca jest na tyle duża, że pomija się raczej takie małe wady. O ile tę małą różnicę można nazwać wadą, bo wyobraź sobie jakie narzuty na czas wykonywania, miałoby przekazywanie obiektów przez parametr/referencję - bo właśnie temu singleton zapobiega.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Hmm.. a spróbuj taką wersję (przynajmniej to co napisałeś trochę mi nie pasuje):
Singleton:
Tradycyjny sposób:
Nie mówię, że będzie dużo lepiej, ale kod jakby właściwszy mi się wydaje. Ten post edytował mariuszn3 3.05.2006, 15:18:20 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 225 Pomógł: 0 Dołączył: 1.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Astarot @ 2006-05-03 07:18:34) Klasę wywołuję wg singleton tym kodem:
A tak tworze obiekt klasy w tradycyjny sposób(wg. moich testów ten sposób jest szybszy)
zły test, chociaż wyniki poprawne singleton jest trochę wolniejszy. nigdy nie zwiększy $test->licznik $zmienna++ zwiększa wartość zmiennej PO użyciu, a nie PRZED mój kod testujący
a wyniki Kod Singleton: 8.5278367996216s Normal: 6.6726980209351s Takie wyniki uzystałem na moim AMD Athlon 2500+ (Barton) -edit- 2 min później lol Ten post edytował Hacker 3.05.2006, 12:55:22 -------------------- (\.../)This is Bunny
(O.o)Copy Bunny into your signature to help him... (> <)...on his way to world domination |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
Przeciez w singletonie nie chodzi o wydajnosc, ale o to, zeby klasa nie mogla byc powielana wieloma obiektami!
Przypominam, ze powinien byc jeszcze zdefiniowany prywatny konstruktor (w twoim przypadku go nie ma i mozna tworzyc obiekty tej klasy) Ten post edytował em1X 3.05.2006, 18:33:26 -------------------- eh, co polska wódka to polska wódka
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 06:39 |