Avatar billede bierchen Nybegynder
25. september 2004 - 16:43 Der er 13 kommentarer og
1 løsning

Garbage Collector

Hvordan udnytter jeg garbage collectoren?

Er det noget .NET framworket selv finder ud af, hvornår objekter ikke bruges længere, eller er det noget jeg skal ind at fortælle ?

Med Venlig Hilsen
Bjørn
Avatar billede arne_v Ekspert
25. september 2004 - 16:46 #1
Det sker helt automatisk.


Du allokerer objekter dynamisk med New.

.NET runtime holder styr på hvilke objekter der stadig er referencer til.

Når .NET runtime synes at det er tid (når den mangler memory), så
garbage collecter den de objekter der ikke længere er referencer til.
Avatar billede snepnet Nybegynder
25. september 2004 - 16:53 #2
du har også muligheden for at kalde GC.Collect(), hvis du vil gennemtvinge et oprydning.
Avatar billede arne_v Ekspert
25. september 2004 - 16:56 #3
Ja, men medmindre der er meget specielle årsager til at man ved bedre end
.NET runtime, så bør man lade den styre GC.
Avatar billede snepnet Nybegynder
25. september 2004 - 17:00 #4
klart !
Avatar billede styrmand Nybegynder
25. september 2004 - 17:02 #5
Garbage Collectoren (GC) løser et gammelt problem.
Tidligere skulle man selv sørge for at frigive objekter. Det betød, at objekterne ofte blev frigivet mens processoren var mest belastet og hermed blev den yderligere belastet.
GC kan manipuleres og bearbedes da den er en del af System
Eks. findes metoderne:

void GC.Collect(Int32 Generation)
void GC.Collect()

Med dem kan du bede GC om at rydde op her og nu. Den første metode, kan du medsende en værdi, som bestemmer, "hvor dybt", du ønsker den skal rydde op.

Rent faktisk kan du også gennemtving frigivning af de klasser som indeholder dispose metoden.

Som udgangspunkt er der ikke noget problem med de simple typer/Klasser som int, string, array o.s.v. men filer, databaseforbindelser og grafik, som "wrappes" ind i koden, skal styres ordentligt med close, dispose o.s.v.
Avatar billede bierchen Nybegynder
25. september 2004 - 17:25 #6
Når jeg erklærer et objekt med new f.eks.
dim minklasse as new klasse

Hvordan ved .NET så, at jeg ikke har brug for dette objekt længere ?

Hvis jeg vil lave en applikation med henblik på minimalt ressource forbrug. Vil jeg så selv aktivt skulle "fjerne mit objekt ??

Hvis jeg f.eks. åbner en ny form, laver noget i min form hvor jeg bl.a. erklærer nogle objekter. Når jeg så senere lukker formen. Vil Garbage collectoren så lukke de objekter jeg har erklæret ?
Avatar billede arne_v Ekspert
25. september 2004 - 17:30 #7
Det holder den styr på.

Dim aobj As AClass = New AClass()

når aobj går ud af scope, så ved .NET runtime at der ikke længere er en
reference og objektet kan GC's ved passend elejlighed
Avatar billede arne_v Ekspert
25. september 2004 - 17:31 #8
Nej. Du overlader det hele til .NET runtime.

Medmindre du har meget specielle behov og du er ekspert i den slags.
Avatar billede arne_v Ekspert
25. september 2004 - 17:32 #9
Ja.
Avatar billede bierchen Nybegynder
25. september 2004 - 17:34 #10
Så tror jeg har forstået det !!

Takker manne gange !!
Avatar billede bierchen Nybegynder
25. september 2004 - 17:35 #11
Lægger du et svar ?
Avatar billede arne_v Ekspert
25. september 2004 - 17:35 #12
kommer her
Avatar billede arne_v Ekspert
17. oktober 2004 - 18:09 #13
Accepterer du svaret ?
Avatar billede bierchen Nybegynder
18. oktober 2004 - 09:42 #14
undskyld !! Jeg beklager mange gange !!!
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