🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #660

Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?

#660
From: Martijn Mulder
Date: Tue, 05 Sep 2006 08:11
82 lines
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-mail
References: <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