Avatar billede mifan Nybegynder
29. januar 2008 - 11:10 Der er 6 kommentarer og
1 løsning

Listview - out of memory

Hej,

jeg arbejder med et værktøj, hvor jeg fylder et listview med billeder / store ikoner.
Jeg scanner en cd for billeder, gør dem til thumbnails og fylder listview med disse via en imagelist.

Det fungerer rigtig godt, så længe der kun er tale om nogle hundrede billeder.

Desværre har jeg behov for, at runde flere tusinde billeder, og så går det lidt galt med memory.

Er der et godt råd?

Jeg leder evt. efter en metode til kun at rendere de thumbnails der er synlige, så de bliver vist efterhånden som jeg scroller i mit listview?

mvh
Mifan
Avatar billede powerpunk Nybegynder
29. januar 2008 - 12:10 #1
Du skal være opmærksom på at Image / Bitmap klasserne bruger unmanaged memory som backing store. Det vil sige at du hver gang du opretter en instans af sådan en klasse allokerer noget memory.

HUSK derfor at kalde Dispose() på objektet så snart du er færdig med at bruge det...
Avatar billede powerpunk Nybegynder
29. januar 2008 - 12:13 #2
f.eks:

Image i = Image.FromFile("myImg.jpg");
Image thumbnail = i.GetThumbnailImage(20, 20, d, IntPtr.Zero);
i.Dispose();
Avatar billede johny Nybegynder
29. januar 2008 - 20:41 #3
Evt. for at gøre det lidt nemmere for dig selv:

using(Image i = Image.FromFile("myImg.jpg")) {
    Image thumbnail = i.GetThumbnailImage(20, 20, d, IntPtr.Zero);
}

Så skal du heller aldrig bekymre dig om, om i f.eks. når at blive sat til null inden du kalder dispose, og slipper for fejlhåndtering.
Avatar billede mifan Nybegynder
31. januar 2008 - 08:29 #4
Tak til jer begge.

Min løsning blev et listview i virtualmode. Det viste sig umiddelbart at løse ressourceproblemet.
Powerpunk gjorde mig dog opmærksom på dispose, som jeg manglede. Så selvom det ikke var min fulde løsning, hælder jeg pointene den vej.
Avatar billede mifan Nybegynder
31. januar 2008 - 08:30 #5
Hov, Powerpunk, opretter du lige et svar? ;)
Avatar billede powerpunk Nybegynder
31. januar 2008 - 09:09 #6
naturligvis. Men jeg deler gerne med Johny (hvis han er interesseret), da jeg faktisk synes hans tilføjelse er ret elegant...
Avatar billede johny Nybegynder
31. januar 2008 - 09:29 #7
Tak for det powerpunk, men jeg havde aldrig kommet på løsningen selv. Var blot en mindre modificering, som du selv siger ja, er ret elegant, og bør bruges meget mere (og den "skal" faktisk bruges hver gang en klasse inheriter fra IDisposable).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester