Article View: be.comp.programming
Article #660Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
From: Martijn Mulder
Date: Tue, 05 Sep 2006 08:11
Date: Tue, 05 Sep 2006 08:11
82 lines
4372 bytes
4372 bytes
>> Mijn vraag geldt in feite in het algemeen, maar ik begon er mij vragen
>> bij te stellen bij het gebruik van XmlTextReader. Worden resources
>> vrijgegeven bij een exception of moet je in een finally blok een .close
>> doen ?
>> Het voorbeeld uit cursus opleiding XML.NET (VB.NET):
>>
>> Dim lezer As New
>> XmlTextReader(Me.Server.MapPath("personeel.xml"))
>> Try
>> Do While lezer.Read
>> Loop
>> lezer.Close()
>> lblWellFormed.Text = "Well-Formed"
>> Catch ex As XmlException
>> lblWellFormed.Text = ex.Message
>> End Try
>>
>> Is oefening om te testen of xml-bestand well-formed is of niet bij het
>> sequentieel nodes lezen.
>> Indien personeel.xml niet well-formed is => XMLException. De reader
>> wordt dan klaarblijkelijk niet gesloten.
>> Ik kan natuurlijk op veilig spelen en code vervangen door :
>>
>> Dim lezer As New
>> XmlTextReader(Me.Server.MapPath("personeel.xml"))
>> Try
>> Do While lezer.Read
>> Loop
>> lblWellFormed.Text = "Well-Formed"
>> Catch ex As XmlException
>> lblWellFormed.Text = ex.Message
>> Finally
>> lezer.Close()
>> End Try
>>
>> Dan wordt de reader gesloten of er nu een exception optreedt of niet.
>> Vraag is : 'Is het nodig ?'
>> Hoe kan ik dat testen ? Met 'Is Nothing' test je op het bestaan van het
>> object en is dus in beide gevallen false.
> Bedankt voor de reacties en de link. Met behulp hiervan en de reacties
> in engelse newsgroup, plus nog stukje VB.NET help-functie, ben ik tot
> volgende code gekomen.
>
> Dim xmlrdr As XmlTextReader = Nothing
> Try
> 'Deze coding zou ook werken zonder de If Not (xmlrdr Is
> Nothing)
> 'in het Finally-blok, maar zodra hier, voor xmlrdr = New Xml...
> 'coding zou staan die een exception veroorzaakt, zou
> xmlrdr.close
> 'een exception veroorzaken in het Finally-blok, vandaar de If
> Not (...
Dit is niet de plaats om je zorgen te maken over exceptions in een ander
deel van je code. De exception handler die je schrijft voor andere delen van
je code zorgt er juist voor dat je dit soort kritieke stukken nooit bereikt.
Als het programma tot hier komt kan je veilig aannemen dat de 'New' op de
volgende regel doet wat je ervan verwacht
> xmlrdr = New XmlTextReader(Me.Server.MapPath("personeel.xml"))
> Do While xmlrdr.Read
> Loop
> lblWellFormed.Text = "Well-Formed"
> Catch ex As XmlException
> lblWellFormed.Text = "XML : " & ex.Message
> Catch ex As Exception
> lblWellFormed.Text = "Andere fout : " & ex.Message
> Finally
> If Not (xmlrdr Is Nothing) Then
> xmlrdr.Close()
> End If
> End Try
De if Not (...) Then ... End If kan je veilig weglaten: If Close() has
already been called, no action is performed.
http://msdn2.microsoft.com/en-us/library/system.xml.xmltextreader.close.aspx
Technical Details
Message-ID:
<44fd3121$0$21131$dbd41001@news.wanadoo.nl>Path:
arc1-ca.pugleaf.net!g2news2.google.com!news3.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!t-online.de!newsfeed.freenet.de!feeder.news-service.com!news2.euro.net!postnews2.euro.net!news.wanadoo.nl!not-for-mailReferences:
<1157379669.503669.211910@i42g2000cwa.googlegroups.com> <1157441721.895658.4750@i42g2000cwa.googlegroups.com>Show Full Headers
Complete Article Headers
X-Google-Thread: fcea4,7165765ea9e31236 X-Google-Thread: 107324,7165765ea9e31236 X-Google-Attributes: gidfcea4,gid107324,public X-Google-Language: DUTCH,ASCII-7-bit Path: arc1-ca.pugleaf.net!g2news2.google.com!news3.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!t-online.de!newsfeed.freenet.de!feeder.news-service.com!news2.euro.net!postnews2.euro.net!news.wanadoo.nl!not-for-mail From: "Martijn Mulder" <i@m> Newsgroups: be.comp.programming,nl.comp.programmeren References: <1157379669.503669.211910@i42g2000cwa.googlegroups.com> <1157441721.895658.4750@i42g2000cwa.googlegroups.com> Subject: Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ? Date: Tue, 5 Sep 2006 10:11:18 +0200 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2869 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2962 X-RFC2646: Format=Flowed; Original Lines: 84 Message-ID: <44fd3121$0$21131$dbd41001@news.wanadoo.nl> Organization: Wanadoo NNTP-Posting-Date: 05 Sep 2006 08:11:13 GMT NNTP-Posting-Host: s5592b976.adsl.wanadoo.nl X-Trace: 1157443873 dr3.euro.net 21131 85.146.185.118:1154 X-Complaints-To: abuse@wanadoo.nl