[ Acid.Reconected @ 01.10.2004. 12:43 ] @
pozdrav svima

imam jedan problem oko oslobadjanja memorije koju zauzimju objekti deklrisani sa NEW:

Ovako: u treeview kontroli, kada korisnik klikne na neki node, prave se tri nova picture boxa

Code:

dim slika1 as new picturebox()
dim slika2 as new picturebox()
dim slika3 as new picturebox()


pa se onda te slike prikazuju na treeview-u

Code:

treeview1.controls.addrange(new control() {slika1,slika2,slika3})


E sada nastaje problem kada korisnik bas dosta puta klikne na razlicite node-ove pa se sve vise memorije zauzima stvaranjem ovih slicica. probao sam da ih brisem ovako:

Code:

slika1.dispose
slika2.dispose
slika3.dispose


ali onda nijedna slika nije prikazana jer je odmah izbrisana.

E pitanje glasi: postoji li nacin da se izbrise memorija svih objekata koji vise ne postoje, a pri brisanju nisu oslobodili memoriju?

HVALA>
[ Dragi Tata @ 01.10.2004. 13:04 ] @
Možeš da eksplicitno pozoveš GC.Collect(), ali se obično preporučuje da ne radiš to, već da ostaviš GC-u da sam proceni kad treba da pokupi memoriju.
[ EXeX @ 01.10.2004. 15:22 ] @
Jarane kao sto ti je receno nemoj da se puno zezas sa oslobadjanjem memorije kod .NET-a jer je to posao GC-a.
Nego rjesenje tvoga problema je da jednom stvoris instancu a kasnije po porebi samo mijenjas sadrzaj te instance.
Jednom se meni desilo isto to kad sam radio jedan real-time sistem koji je svake sekunde provjeravao sadrzaj BD-a.
Ja sam u toj petlji koja je ustvari bila timer kreirao objekte i tako mi se aplikacija rusila.
Rjesenje je bilo da kreiram jednu instancu te onda samo mijenjam preko reference sadrzaj te instance.Dakle jedan memoriski prostor vise sadrzaja.
[ Acid.Reconected @ 02.10.2004. 14:23 ] @
probao sam nesto slicno, ali mi onda prikazivanje tih slicica ne ide bas po planu. Ja sam to probao tako sto sam na pocetku klase deklariso slicice, a posle umesto NEW samo im menjao polozaj, ali onda pocunju nekeako cudno da se ponasaju.

A sto je toliko strasno rucno koristiti GC?
[ EXeX @ 03.10.2004. 16:59 ] @
Vjerovatno nisi nesto dobro uradio,moralo bi ici.
Zato sto je GC predvidjen da automatski to radi i onda se nekad moze desiti da dodje do zbrke ili da se neoslobodi memorija itd...
Za dublju analizu potrazi malo na netu.
[ Deep|Blue @ 07.10.2004. 12:59 ] @
*ako zelis da ti na svkom cvoru treeview kontrole ostaju slike, ond si malo nagrabusio. :)
u tom slucaju probaj da pravis manje slike - thumbinail-ove, po mogucnosti da smanjis broj boja ili tako nesto. ja sam u listview kontroli bez nekih vecih problema prikazivao i do 70-80 slicica velicine 100*70 pix u 8bit depth, ali kao ikone stavki.
picturebox kontrola pravi velike probleme sa memorijom, ukoliko je ne oslobodis. ili ako suvise uvecas sliku.

*ukoliko nema potrebe da se prikazuju slike na prethodnim cvorovima, vec samo na trenutnom onda je vec mnogo lakse
kreiraj 3 picturebox-a
e sad kad prikzujes slike u njima probaj nesto kao

Code:

picturebox1.dispose
picturebox = image.fromfile(putanja1)
treeview1.controls.add(picturebox1)

'ponovis ovo za preosala 2 pictureboxa