Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Razlika izmedju virtual i dynamic

[es] :: Pascal / Delphi / Kylix :: Razlika izmedju virtual i dynamic

[ Pregleda: 1786 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nikomak
Nikola Makić
Beograd

Član broj: 177053
Poruke: 65
*.eunet.rs.



+1 Profil

icon Razlika izmedju virtual i dynamic02.08.2008. u 20:45 - pre 161 meseci
Pozdrav svima,

Moj ortak i lokalni delphi guru je otisao sa verenicom na more, pa resih da priupitam vas :)
U cemu je "stvarna" razlika izmedju virtual i dynamic keyword-a u delphi-u.
Kako sam procitao u zvanicnoj dokumentaciiji: "virtual is good for speed, while dynamic is good for size".
Mene interesuje kako se ovo manifestuje u "praksi" na "stvarnim" projektima/klasama, posto moram da
izmenim njih nekoliko dok se ortak ne vrati sa odmora :)

Unapred hvala svima na odgovorima.

TurboDispatchJumpAddressEnd
----
Knocka Fia
----
And so we meet, again in a different time
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2673



+76 Profil

icon Re: Razlika izmedju virtual i dynamic03.08.2008. u 12:30 - pre 161 meseci
> U cemu je "stvarna" razlika izmedju virtual i dynamic keyword-a u delphi-u.

Oba rade istu stvar, razlikuju se u načinu implementacije. virtual metode su indeksirane u VMT tabeli klase tako da se pri pozivanju trenutno lociraju, dynamic se lociraju pretragom kroz sve metode u početnoj klasi kao i u parent klasama.

> Kako sam procitao u zvanicnoj dokumentaciiji: "virtual is good for speed, while dynamic is good for size".

Da, virtual zahtevaju po 4 bajta u osvnoj klasi kao i u izvedenim klasama, dynamic 0 bajtova ali se zato sporije pretražuju.

> Mene interesuje kako se ovo manifestuje u "praksi" na "stvarnim" projektima/klasama, posto moram da
> izmenim njih nekoliko dok se ortak ne vrati sa odmora :)

Imaš li razloga da menjaš? Virtual se koristi po pravilu dok dynamic samo kada izvedene klase retko overajduju metodu (klasa ima dosta izvedenih klasa ali samo poneka overajduje metodu). Pogledaj TPersistent.GetOwner lep primer za dynamic upotrebu.

Iz helpa:
Virtual versus dynamic

Virtual and dynamic methods are semantically equivalent. They differ only in the implementation of method-call dispatching at runtime. Virtual methods optimize for speed, while dynamic methods optimize for code size.

In general, virtual methods are the most efficient way to implement polymorphic behavior. Dynamic methods are useful when a base class declares many overridable methods which are inherited by many descendant classes in an application, but only occasionally overridden.

Note
Only use dynamic methods if there is a clear, observable benefit. Generally, use virtual methods.
 
Odgovor na temu

nikomak
Nikola Makić
Beograd

Član broj: 177053
Poruke: 65
*.eunet.yu.



+1 Profil

icon Re: Razlika izmedju virtual i dynamic03.08.2008. u 14:25 - pre 161 meseci
Pozdrav,

Hvala na iscrpnom i detaljnom odgovoru :)
Hteo sam da promenim dynamic keyworde u virtual na jednoj apstraktnoj klasi (koja nasledjuje od TWinControl) i koja je posle dosta puta izvedena, a u cilju "ubrzanja", odnosno ovako nesto

Code:

type
 TMyControl = class(TWinControl)
...
 protected
   procedure Change; dynamic;
   procedure Reset; dynamic;
   procedure Scroll(X, Y: Integer); dynamic;
...
end;


Sve ostale relevantne metode su virtual. No, izgleda da ja to nisam dobro ukapirao, jer izgleda da je ovde dynamic dobar izbor :)
Hvala jos jednom.
TurboDispatchJumpAddressEnd
----
Knocka Fia
----
And so we meet, again in a different time
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2673



+76 Profil

icon Re: Razlika izmedju virtual i dynamic04.08.2008. u 00:33 - pre 161 meseci
> Hteo sam da promenim dynamic keyworde u virtual na jednoj apstraktnoj klasi (koja nasledjuje od TWinControl) i koja je posle dosta
> puta izvedena, a u cilju "ubrzanja", odnosno ovako nesto

Ako se Scroll često poziva i tražiš ubrzanje onda je promena u virtual oprvdana.
 
Odgovor na temu

nikomak
Nikola Makić
Beograd

Član broj: 177053
Poruke: 65
*.eunet.rs.



+1 Profil

icon Re: Razlika izmedju virtual i dynamic04.08.2008. u 16:01 - pre 161 meseci
Pozdrav,

Ne poziva se cesto, cini mi se bar :)
Izbor je izgleda od samog starta bio dobar.


TurboDispatchJumpAddressEnd
----
Knocka Fia
----
And so we meet, again in a different time
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Razlika izmedju virtual i dynamic

[ Pregleda: 1786 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.