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

CLR and GC(Garbage collection) pojašnjenja

[es] :: .NET :: CLR and GC(Garbage collection) pojašnjenja

[ Pregleda: 3055 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

krvopije
Dusko Maksimovic
Beograd

Član broj: 3289
Poruke: 136
*.vdial.verat.net

Sajt: www.reosonline.com


Profil

icon CLR and GC(Garbage collection) pojašnjenja30.10.2003. u 19:23 - pre 218 meseci
Molio bih nekoga ko moye da mi pojasni sledeće stvari :

Naravim klasu (npr. u VB.NET-u) i u okviru nje napišem metod Finalize() - destruktor.

Da li je sledeće tačno:

1. Prilikom čišćenja ovog objekta iz memorije od strane GC-a, pre nego što se on izbriše iz memorije pozove izvrši se kod unutar Finalize().

2.Pošto GC ne čisti sistemske resurse pozvane od strane nekog objekta prilikom čišćenja samog objekta da bi očistile te objekta potrebno je pozvati metod dispose za oslobađanje sistemskih resursa.

3.Kada čistim objekat metodom Dispose() manualno onda on oslobađa memoriju koju je sam zauzeo i svi sistemski resursi, koje je on pozvao, takođe oslobađaju memoriju.

4.Za šta se koristi metod GC.SupressFinalize?

5. Kada se uopšte koristi metod Finalize(), a kada Dispoze() i da li baš moraju da sekoriste?

Unapred Hvala!

 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: CLR and GC(Garbage collection) pojašnjenja30.10.2003. u 20:17 - pre 218 meseci
1) Tačno

2) Tačno je da GC sam po sebi ne čisti resurse osim memorije. Zato ti resursi moraju da se očiste ili iz Dispose ili iz Finalize ili iz neke treće funkcije koja se poziva eksplicitno.

3) Netačno. Memorija se oslobađa kad je očisti GC - Dispose sa tim nema nikakve veze.

4) U principu, često se kod koji čisti "ne-memorijske resurse" stavi u Dispose, ali za svaki slučaj i u Finalize ako se Dispose ne pozove. Zato se u Dispose funkciji poziva SurpressFinalize koji GC-u daje do znanja da ne zove Finalize za taj objekat jer su resursi već počišćeni u Dispose. AKo Dispose nije pozvano, izvršiće se Finalize kad mu bude vreme, pa će resursi opet biti počišćeni.

5) Pročitaj detaljno ovo:

http://msdn.microsoft.com/libr...ntialsforgarbagecollection.asp
 
Odgovor na temu

krvopije
Dusko Maksimovic
Beograd

Član broj: 3289
Poruke: 136
*.vdial.verat.net

Sajt: www.reosonline.com


Profil

icon Re: CLR and GC(Garbage collection) pojašnjenja30.10.2003. u 20:54 - pre 218 meseci
Hvala na ovim odgovorima, ali još malo da pojasnimo.


Tačka 3.

Zar nije npr. objekat konekcije ka sql serveru u stvari objekat u memoriji koji se pozivom Dispose() čisti iz memorije. Ako se ne čisti memorija onda šta se čisti ili oslobađa.

Npr. ako napravim objekat bicikl koji pravi objekat točak i pravi konekciju sa sql serverom i sada pozovem bicikl.dispose(), šta se dešava?
Bicikl se čisti = briše iz memorije
Točak se čiti = briše se iz memorije
Sql konekcija se oslobađa = ??????

Izvinjavam se ako su neka pitanje nebulozna ali bitno mi je da ovo svarim!!


Pozdrav
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: CLR and GC(Garbage collection) pojašnjenja30.10.2003. u 21:01 - pre 218 meseci
Pitanja su ti u stvari vrlo dobra i nemoj uopšte da se ustručavaš.

Ako imaš objekat bicikl klase Bicikl i pozoveš bicikl.Dispose(), jedino što će da se desi je da se izvrši ta funkcija. Dakle, ako si u funkciju Bicikl.Dispose() stavio kod koji zatvara SQL konekciju, onda će upravo to i da se desi. Ni bicikl ni točak neće biti očišćeni iz memorije.

U .NET okruženju ne postoji način da pojedine objekte eksplicitno izbrišeš iz memorije. O tome se stara GC. Jedino što možeš da uradiš je da eksplicitno pozoveš funkciju GC.Collect() koja će da aktivira GC kad ti želiš, a ne kad on to nađe za shodno. Microsoft u principu ne preporučuje da se ta funkcija preterano koristi.
 
Odgovor na temu

krvopije
Dusko Maksimovic
Beograd

Član broj: 3289
Poruke: 136
*.yubc.net

Sajt: www.reosonline.com


Profil

icon Re: CLR and GC(Garbage collection) pojašnjenja30.10.2003. u 22:22 - pre 218 meseci
Hoćeš da kažeš da u stvari sa metodom Dispose() mogu da samo oslobađam NEMEMORIJSKE RESURSE implicitno(stavljanjem koda u okviru funkcije Dispose()), a da u metodi Finalize() (takođe stavljanjem koda) ih ustvari samo označim da prilikom uništavanja objekta iz memorije, od strane GC-a, se oslobode resursi.
Objekat klase koji nema metod Finalize(), koji nije obavezan, a koji je okupirao neki resurs, prilikom uništavanja od strane GC-a neće osloboditi te resurse.

U prevodu za brisanje iz memorije odgovoran je SAMO GC a mi tu priskačemo sa Finalize() i Dispose() da se rešimo NEMORIJSKIH RERURSA???

Hvala i pozdrav
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: CLR and GC(Garbage collection) pojašnjenja30.10.2003. u 22:42 - pre 218 meseci
Baš tako. Kombinacija Dispose+Finalize služi da zatvorimo fajlove, db konekcije i slične resurse, a o memoriji brine GC.
 
Odgovor na temu

krvopije
Dusko Maksimovic
Beograd

Član broj: 3289
Poruke: 136
*.yubc.net

Sajt: www.reosonline.com


Profil

icon Re: CLR and GC(Garbage collection) pojašnjenja31.10.2003. u 09:25 - pre 218 meseci
Hvala sada je sve leglo kako treba i sve je jasno.


Pozdrav!
 
Odgovor na temu

[es] :: .NET :: CLR and GC(Garbage collection) pojašnjenja

[ Pregleda: 3055 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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