Article View: nl.comp.programmeren
Article #469Re: C# garbage collector
From: Pieter Philippaerts
Date: Fri, 19 Sep 2003 11:41
Date: Fri, 19 Sep 2003 11:41
47 lines
3338 bytes
3338 bytes
"Jo Vermeulen" <jo@lumumba.luc.ac.be> wrote > Ik had een vraagje. In een C# project (in het compact .NET framework) > vervang ik soms een afbeelding door een andere afbeelding. Ik heb gezien > dat sommige mensen dan eerst dit doen: > Is dat nodig? Ik dacht dat C# garbage collection had. Of dient het enkel > om C# een "hint" te geven dat dit object verwijderd kan worden? Alle klassen in de .NET runtime die zogenaamde unmanaged resoruces encapsuleren hebben ofwel een Dispose ofwel een Close methode. De reden hiervoor is dat de garbage collector maar af en toe uitgevoerd wordt en dit kan problemen opleveren met sommige unmanaged resources. Neem bijvoorbeeld een File. FileStream fs = File.Open(.., FileShare.None); fs.Read(...); fs = null; // rest van code Het probleem met bovenstaande code is dat het bestand open blijft totdat de GC aangeroepen wordt [wat potentieel een hele tijd kan duren]. Dit wil zeggen dat andere programma's die dat bestand willen openen gewijgerd worden, omdat je file sharing op None hebt gezet. Volgende code is een stuk beter: FileStream fs = File.Open(.., FileShare.None); fs.Read(...); fs.Close(); // rest van code Bovenstaande code gaat het bestand sluiten zodra het niet meer nodig is. Het is duidelijk dat bovenstaand geval enkel van toepassing is voor bestanden, maar er zijn nog andere redenen om unmanaged resources zo snel mogelijk vrij te geven. Zo hebben de oudere Windows platformen [98, ME, misschien ook NT4] een vrij beperkte set van handles en zo ongeveer elke unmanaged resource [buiten geheugen] gebruikt zo'n handles. Het is dus duidelijk dat als je 10000 images opent zonder ze te sluiten dat je image handles wel eens op kunnen geraken voordat de eerste image handles door de GC terug vrijgegeven worden. Een derde reden die in jouw geval van toepassing is is geheugengebruik. Images kunnen heel wat geheugen innemen en dus is het misschien wel een goed idee om dat geheugen zo snel mogelijk terug vrij te geven. MVg, Pieter Philippaerts
Technical Details
Message-ID:
<1063971705.136647@seven.kulnet.kuleuven.ac.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!colt.net!syros.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mailReferences:
<bkecq3$11sg$1@nl-news.euro.net>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: 107324,99e0602d9fb9d25e X-Google-Attributes: gid107324,public X-Google-Thread: fcea4,99e0602d9fb9d25e X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2003-09-19 04:41:48 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!colt.net!syros.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mail From: "Pieter Philippaerts" <Pieter@nospam.mentalis.org> Newsgroups: nl.comp.programmeren,be.comp.programming Subject: Re: C# garbage collector Date: Fri, 19 Sep 2003 13:41:47 +0200 Organization: KULeuvenNet Lines: 49 Message-ID: <1063971705.136647@seven.kulnet.kuleuven.ac.be> References: <bkecq3$11sg$1@nl-news.euro.net> NNTP-Posting-Host: seven.kulnet.kuleuven.ac.be X-Trace: naxos.belnet.be 1063971705 2677 134.58.127.12 (19 Sep 2003 11:41:45 GMT) X-Complaints-To: abuse@belnet.be NNTP-Posting-Date: Fri, 19 Sep 2003 11:41:45 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.3790.0 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0 Cache-Post-Path: seven.kulnet.kuleuven.ac.be!unknown@localhost X-Cache: nntpcache 2.4.0b5 (see http://www.nntpcache.org/)