🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: nl.comp.programmeren
Article #469

Re: C# garbage collector

#469
From: Pieter Philippaerts
Date: Fri, 19 Sep 2003 11:41
47 lines
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-mail
References: <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/)