Article View: pl.comp.lang.c
Article #272356Re: [SGCL] Odśmiecania współbieżnego ciąg dalszy
From: Artur Bać
Date: Wed, 27 Feb 2008 19:13
Date: Wed, 27 Feb 2008 19:13
80 lines
3743 bytes
3743 bytes
Sebastian Kaliszewski wrote:
>> Teraz postaw się w sytuacji (która mnie dotknęła) wytłumacz to
>> przeciętnemu koderowi języka z GC (i tylko jednego języka, bo tacy
>> jednojęzykowcy są tanii).
>>
>> Co mu powiesz?
>
> Powiem mu, że jak plik otworzył, to musi dopilnować jego zamknięcia. Cała
> filozofia.
Przyklad z niby bardziej odpornego C# od javy, pokazujacy jak bardzo nie
swiadomosc detali lub poleganie na automacie krzywdzi i jak latwo mozna
pasc ofiara automatow i GC.
Sam w to wpadlem swego czasu i niestety zabolalo, aplikacja byla juz
wersja produkcyjna i zawiodla w momncie gdy bylo ztroche a pozno na
zabawe z kodem.
void Cos() {
FileStream x = new ....
using( BinaryWriter br = new BinaryReader (x) ) {
//blabla
}
}
Pytanie 1:
Kiedy fs zwolni zasoby 'handle' do plikow.
a) po zakonczeniu scope using
b) po zakonczeniu scope Cos
c) po zakonczeniu programu lub gdy gc sie zlituje tj niewiadomo kiedy.
odpowiedz prawidlowa
c) br oleje fs, a destruktor fs niewiadomo kiedy bedzie wykonany.
dokladnie dzieje sie tak chyba z tego co rozumie iz dopuki ostatnia
referencja nie zginie doputy wszelkie wywolania Dispose() zostana
zignorowane a tu mamy az 2 kopie jedna posiada BianryWriter a druga jest
zadeklarowana w obrebie metody.
Tak wiec zycze powodzenia z wolaniem metody Close na BianryWriter.
FaileStream z NET ma implementacje:
public virtual void Close()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing && (this._asyncActiveEvent != null))
{
this._CloseAsyncActiveEvent(Interlocked.Decrement(ref
this._asyncActiveCount));
}
}
private void _CloseAsyncActiveEvent(int asyncActiveCount)
{
if ((this._asyncActiveEvent != null) && (asyncActiveCount == 0))
{
this._asyncActiveEvent.Close();
this._asyncActiveEvent = null;
}
}
Pytanie 2:
Kiedy progrmaista sie o tym zorientuje
a) mozliwe ze nigdy
b) gdy aplikacja sypnie sie u klienta
c) w trakcie testow
d) ciezko powiedziec, wszystkie mozliwosci sa relane
najblizsza prawdy
d) a jak sie sypnie to komunikat exception wyzuci sie z bardzo
idiotycznym problemem kernela32.
W tak prostych przypadkach siadmosc kiedy zasoby sa zwalniane jest
przydatna bo pozwala zrozumiec istote problemu.
Technical Details
Message-ID:
<fq4co0$5en$1@news2.task.gda.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.task.gda.pl!not-for-mailReferences:
<fppvdq$68v$1@inews.gazeta.pl> <fq0od3$5bm$1@inews.gazeta.pl> <fq0qpa$ekv$1@inews.gazeta.pl> <fq0s58$jvv$1@inews.gazeta.pl> <fq0tjl$shn$1@news.vectranet.pl> <fq10ir$8nn$1@inews.gazeta.pl> <fq140s$2u6$1@news.vectranet.pl> <fq164t$3bl$1@inews.gazeta.pl> <fq1mqa$kqq$1@news.vectranet.pl> <fq42jk$k6t$1@bozon2.softax.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.task.gda.pl!not-for-mail From: Artur Bać <artur_nospam@ebasoft.com.pl> Newsgroups: pl.comp.lang.c Subject: Re: [SGCL] Odśmiecania współbieżnego ciąg dalszy Date: Wed, 27 Feb 2008 20:13:01 +0100 Organization: CI TASK http://news.task.gda.pl/ Lines: 80 Message-ID: <fq4co0$5en$1@news2.task.gda.pl> References: <fppvdq$68v$1@inews.gazeta.pl> <fq0od3$5bm$1@inews.gazeta.pl> <fq0qpa$ekv$1@inews.gazeta.pl> <fq0s58$jvv$1@inews.gazeta.pl> <fq0tjl$shn$1@news.vectranet.pl> <fq10ir$8nn$1@inews.gazeta.pl> <fq140s$2u6$1@news.vectranet.pl> <fq164t$3bl$1@inews.gazeta.pl> <fq1mqa$kqq$1@news.vectranet.pl> <fq42jk$k6t$1@bozon2.softax.pl> NNTP-Posting-Host: www.ebasoft.com.pl Mime-Version: 1.0 X-Trace: news2.task.gda.pl 1204139584 5591 85.237.185.105 (27 Feb 2008 19:13:04 GMT) X-Complaints-To: abuse@news.task.gda.pl NNTP-Posting-Date: Wed, 27 Feb 2008 19:13:04 +0000 (UTC) X-Notice1: This post has been postprocessed on the news.task.gda.pl server. X-Organization-Notice: Organization line has been filtered X-Organization-Original: EBASoft In-Reply-To: <fq42jk$k6t$1@bozon2.softax.pl> User-Agent: Thunderbird 2.0.0.12 (Windows/20080213) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit