Hej, Jag har sett ett exempel på (inte trådsäker) egen hantering av garbage collectorn som var ca 4 A4 sidor extra kod... Det var en kortversion som inte tog hänsyn till allt! Garbage collectorn körs när den tycker att den behöver eller kan det. Ok, tack så mycket. Jag har fått lite bättre koll på det hela efter några googlingar oxå :)GC i VB.net
Alltid när jag gör större program med mycket bitmap bilder, structer osv. Växer alltid minnet programmet tar upp i aktivitetshanteraren konstant.
Jag har hört att VB.net skall fixa det automatiskt. Hur ofta rensar VB.net och hur kan jag rensa manuellt?Sv: GC i VB.net
Det du kan göra är att köra Dispose på dina objekt när du är färdig med dem - alternativt låta dem gå ur scope så snabbt som möjligt.
Då går garbage collectorn in när det behöver frigöras plats för nya objekt.
/mickeSv:GC i VB.net
Det innebär tex som Micke säger att den körs om managed heap är full och den behöver plats för att skapa nya objekt (förutsatt att den tycker att den hinner, annars ber den bara om mer plats för managed heap). Den kan också köras när applikationen har lite last.
När garbage collectorn körs, kommer den att titta på vilka objekt som fortfarande har s k "root-referencer" det innebär objekt som fortfarande är tillgängliga från applikationen på ett eller annat sätt. De som inte har root-referencer tar den bort. CLR/kompilatorerna använder sig också av ett trick där den kan identifiera att ett objekt inte kommer att användas längre, trots att den kanske har en referens kvar just nu, och tar även bort dessa objekt.
När det gäller dispose så påverkar den inte garbage collectorn på något sätt. Däremot i ditt fall där du jobbar mycket med grafik är Dispose livsnödvändig.
Det är nämligen så att allt minne inte hanteras av garbage collectorn. Delar av det minnet som allokeras för tex filer, fönster, grafik handtag osv, ligger utanför .NET's kontroll. Det är då dispose kommer in. Dispose är en metod som utvecklaren av en klass lagt till för att ge oss ett sätt att be objektet att ta bort alla resurser som .NET inte kan hantera.
En tumregel är att "om det finns en close eller dispose metod, använd alltid den innan objektsreferensen försvinner" för att vara så optimal som möjligt minnesmässigt.Sv: GC i VB.net