Avatar billede adagio Nybegynder
21. februar 2011 - 14:48 Der er 4 kommentarer og
1 løsning

Dispose GDI Objects

Jeg har lavet en klasse der nedarver fra ListView. Denne liste finder alle filer i en bestemt mappe, henter ikonet for filen og viser ikonet+filnavn i listen, for hver fil (er lidt mere avanceret end bare en almindelig file-explorer, men hvad angår dette problem, lad os bare sige at det egentligt bare er det samme... just to keep it simple)

Jeg har et problem ved disposal af GDI objekter, holder man øje med taskmanager stiger antallet af GDI objekter hver gang den bliver opdateret

Her er den kode, hvor antallet stiger:

[code]
Dim shinfo As SHFILEINFO = New SHFILEINFO
shinfo.szDisplayName = New String(Chr(0), 260)
shinfo.szTypeName = New String(Chr(0), 80)

For each filename as string in FileNameList
Dim hImgSmall As IntPtr
hImgSmall = SHGetFileInfo(filename, 0, shinfo, Marshal.SizeOf(shinfo), SHGFI_ICON Or SHGFI_SMALLICON)
Next
[/code]

Dette er den del af koden der hæver antallet at GDI objekter. Jeg har selvfølgelig en del kode derefter, der faktisk får fat i ikonet og tilføjet det hele til listen, men den del har jeg udkommenteret lige nu, for at tage fat om problemet hvor den er

Jeg har læst rundt omkring på nettet om at bruge CloseHandle(hImgSmall) til at frigøre den, men det gør ingen forskel

Any ideas?
Avatar billede arne_v Ekspert
21. februar 2011 - 16:13 #1
CloseHandle(hImgSmall)  burde løse problemet.

Men den skal naturligvis kaldes for alle værdierne af hImgSmall!
Avatar billede adagio Nybegynder
21. februar 2011 - 16:53 #2
Har jeg prøvet og gjorde ingen forskel... har selvfølgelig smidt CloseHandle(hImgSmall) ind i loopen
Avatar billede arne_v Ekspert
22. februar 2011 - 03:38 #3
Kan du poste et komplet eksempel som viser problemet?
Avatar billede adagio Nybegynder
22. februar 2011 - 09:41 #4
Jeg har uploadet et eksempel her:

http://www.megafileupload.com/en/file/302548/GDIobjectsTester-rar.html

I eksemplet har jeg fjernet alt unødvendig kode
Avatar billede adagio Nybegynder
13. april 2011 - 11:18 #5
Ingen der har en ide om hvad der er galt med min kode?
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
Kurser inden for grundlæggende programmering

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