Article View: be.comp.programming
Article #659Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
From: Pugi!
Date: Tue, 05 Sep 2006 07:35
Date: Tue, 05 Sep 2006 07:35
79 lines
3986 bytes
3986 bytes
Pugi! schreef:
> 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.
>
> thanx,
>
> Pugi!
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 (...
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
Denk dit het is, tenzij er nog suggesties zijn.
Pugi!
Technical Details
Message-ID:
<1157441721.895658.4750@i42g2000cwa.googlegroups.com>Path:
arc1-ca.pugleaf.net!g2news2.google.com!postnews.google.com!i42g2000cwa.googlegroups.com!not-for-mailReferences:
<1157379669.503669.211910@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!postnews.google.com!i42g2000cwa.googlegroups.com!not-for-mail From: "Pugi!" <puginews@gmail.com> Newsgroups: be.comp.programming,nl.comp.programmeren Subject: Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ? Date: 5 Sep 2006 00:35:22 -0700 Organization: http://groups.google.com Lines: 80 Message-ID: <1157441721.895658.4750@i42g2000cwa.googlegroups.com> References: <1157379669.503669.211910@i42g2000cwa.googlegroups.com> NNTP-Posting-Host: 81.246.30.163 Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" X-Trace: posting.google.com 1157441727 17396 127.0.0.1 (5 Sep 2006 07:35:27 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Tue, 5 Sep 2006 07:35:27 +0000 (UTC) In-Reply-To: <1157379669.503669.211910@i42g2000cwa.googlegroups.com> User-Agent: G2/0.2 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6,gzip(gfe),gzip(gfe) X-HTTP-Via: 1.0 SERVER2 Complaints-To: groups-abuse@google.com Injection-Info: i42g2000cwa.googlegroups.com; posting-host=81.246.30.163; posting-account=Wn8Dzw0AAADBlmrHDaMaBID43Tq7b6Bl