Avatar billede baileys Nybegynder
02. december 2005 - 13:19 Der er 10 kommentarer

Garbagecollection - hvordan markeres de?

Jeg har nogle objekter, som jeg gerne vil have min garbage-collector skal tage sig af - er det nok abre at markere disse som null, eller hvad?

Ligeledes, hvis jeg har en class med nogle objekter og typer, hvordan kan jeg så sørge for, at når klasses nu ryger gennem garbage-collectoren, så ryger de objekter der bruges i den også? Er det nok bare at null'e objekterne i destructoren?

Eller er det bedre at implemtere IDispose, og sørge for at garbage-collectoren ikke får noget at sige?
Avatar billede nielle Nybegynder
02. december 2005 - 13:27 #1
Svarene er:

Ja.

Ja.

IDispose bruges når du også skal have ryddet op i unmanaged resourcer. F.eks. hvis din klasse har COM-porten åben eller har et handle til din database eller sådan noget.
Avatar billede arne_v Ekspert
02. december 2005 - 14:01 #2
Det er et sted mellem rigeligt og for meget at sætte dem til null.

Normalt vil man bare lade dem gå ud af scope.

Du sakl ikke tænke på GC - den gør det bare
Avatar billede baileys Nybegynder
02. december 2005 - 14:52 #3
Problemet er bare at min .Net memory profiler siger noget andet - nemlig at ved en gen2-collect bliver alle ting ikke taget med, samt der er en svag løbende stigning i hukommelses-forbruget... men det er ikke det det går ud på lige nu :)

Jeg går ud fra at alle .Net-ressourcer er managed - eller tager jeg fejl - og hvad med arrays og types - hvordan fanger jeg dem - som managed eller unmanaged?
Avatar billede baileys Nybegynder
02. december 2005 - 14:54 #4
F.eks. hvis jeg gør brug af IDispose.. hvordan/hvor fanger jeg så min, f.eks. string og en ArrayList? Som managed eller unmanaged?
Avatar billede arne_v Ekspert
02. december 2005 - 14:56 #5
alt .NET er managed men eksterne ressourcer filer, databaser, netværk etc.
er ikke .NET helt ud til metallet
Avatar billede baileys Nybegynder
02. december 2005 - 15:03 #6
Er det generelt en god idé at null'e strings m.m.? F.eks. int giver et problem.
Avatar billede nielle Nybegynder
02. december 2005 - 15:10 #7
Det er på ingen måde nødvendigt at null'e - hvis dine klasser går ud af scope collectes de. Jeg synes at det er pæn programmeringsskik; Ved at null'e viser man at man har gjort sig klart at man ikke skal bruge instansen mere. Men det er ultimativt et spørgsmål om smag-og-behag.

Nej, int (altså System.Int32) kan ikke null'es. Den nedarver nemlig fra System.ValueType.
Avatar billede arne_v Ekspert
02. december 2005 - 16:51 #8
int kan ikke sættes til null, men int? (2.0) kan

og jeg vil bestemt fraråde at sidde og null'e alt muligt: det giver flere linier
kode og det er mere sandsyneligt at det forværrer performance end det forbedrer
Avatar billede nielle Nybegynder
11. december 2005 - 19:28 #9
Lukketid?
Avatar billede Syska Mester
04. januar 2008 - 17:11 #10
wow, still open ... søgte lige på profiler og fandt den her tråd :-)

og nogle andre ... tror ANTS profiler bliver mit svar til mig selv.

// ouT
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