🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
19 messages
19 total messages Started by Pugi! Mon, 04 Sep 2006 14:21
[VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#612
Author: Pugi!
Date: Mon, 04 Sep 2006 14:21
43 lines
2651 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.

thanx,

Pugi!
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#613
Author: Martijn Mulder
Date: Mon, 04 Sep 2006 18:27
46 lines
2937 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.


Hou lezer.Close() in de 'Finally'. In C#, ook een .NET taal, zal het niet 
correct de-alloceren van resources ws. niet tot een memory leak leiden, 
omdat de de garbage collector de boel opruimt, maar in het kader van 
'defensief programmeren' kan je dat maar beter v��r zijn. Het blijft keurige 
code, de file wordt op 1 plaats geopend en op 1 plaats gesloten. Houen zo! 
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#653
Author: John Bokma
Date: Mon, 04 Sep 2006 18:38
27 lines
2138 bytes
"Pugi!" <puginews@gmail.com> wrote:

> Dan wordt de reader gesloten of er nu een exception optreedt of niet.
> Vraag is : 'Is het nodig ?'


Met veel talen, en hier wellicht ook, zal het object als het uit scope 
gaat gesloten worden. Aangezien er al iets mis is, en je dus niet hoeft te 
weten of het sluiten mis ging, zou ik niet een expliciete close doen.

Het defensief programmeren argument wat ik in een andere reply las is 
precies waarom ik defensief programmeren zo'n vreselijke onzin vind. Ik 
bedoel, het sluiten *word* gedaan, waarom je code meer onleesbaar maken.

Het is wat mij betreft net zo'n onzin als na

lblWellFormed.Text = "Well-Formed"

controleren of die string er wel echt in zit (want er kan wel eens een 
bitje omgevallen zijn). Of te wel, het is een automatische deur dichtduwen 
met de hand.

-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#654
Author: Martijn Mulder
Date: Mon, 04 Sep 2006 19:43
35 lines
2503 bytes
>> Dan wordt de reader gesloten of er nu een exception optreedt of niet.
>> Vraag is : 'Is het nodig ?'


> Met veel talen, en hier wellicht

Hier ga je de fout in, met het woordje 'wellicht'. Toen programmeren nog 
leuk was, met Microsoft Macro Assembler, schreef ik regelmatig

ASSUME NOTHING

in mijn code, met hoofdletters, en dat ben ik nooit vergeten.

> ook, zal het object als het uit scope
> gaat gesloten worden. Aangezien er al iets mis is, en je dus niet hoeft te
> weten of het sluiten mis ging, zou ik niet een expliciete close doen.
>
> Het defensief programmeren argument wat ik in een andere reply las is
> precies waarom ik defensief programmeren zo'n vreselijke onzin vind. Ik
> bedoel, het sluiten *word* gedaan, waarom je code meer onleesbaar maken.
>
> Het is wat mij betreft net zo'n onzin als na
>
> lblWellFormed.Text = "Well-Formed"
>
> controleren of die string er wel echt in zit (want er kan wel eens een
> bitje omgevallen zijn). Of te wel, het is een automatische deur dichtduwen
> met de hand.


Lees even mee, in Microsoft's .NET Framework Developer's Guide, waar we 
lezen: "Some resource cleanup, such as closing a file, must always be 
executed even if an exception is thrown"

http://msdn2.microsoft.com/en-us/library/ke0zf0f5.aspx 
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#655
Author: John Bokma
Date: Mon, 04 Sep 2006 20:04
27 lines
2173 bytes
"Martijn Mulder" <i@m> wrote:

>>> Dan wordt de reader gesloten of er nu een exception optreedt of
>>> niet. Vraag is : 'Is het nodig ?'
> 
> 
>> Met veel talen, en hier wellicht
> 
> Hier ga je de fout in, met het woordje 'wellicht'.

Nee, omdat ik deze taal niet ken, sterker, zie onder :-D.

> Lees even mee, in Microsoft's .NET Framework Developer's Guide, waar
> we lezen: "Some resource cleanup, such as closing a file, must always
> be executed even if an exception is thrown"

Precies, en in dat geval heeft het *NIETS* met defensief programmeren te 
maken, en *moet* het gewoon middels een final constructie, en was mijn 
voorzichtige wellicht correct ipv aan te nemen dat het wel goed gaat, en 
vervolgens over "maar het kan geen kwaad" (defensief) te leuteren :-D.


-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#656
Author: Martijn Mulder
Date: Mon, 04 Sep 2006 23:08
4 lines
1464 bytes
Je doet het v��rkomen of jouw foute antwoord wellicht beter is dan mijn 
juiste antwoord, je beroept je op onwetendheid om je foute antwoord te 
vergoeilijken, je legt me woorden in de mond, je zegt dat ik leuter en je 
schrijft krom nederlands. Wat moeten we hiermee? 
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#657
Author: John Bokma
Date: Mon, 04 Sep 2006 23:24
42 lines
2949 bytes
"Martijn Mulder" <i@m> wrote:

> Je doet het v��rkomen of jouw foute antwoord wellicht beter is dan
> mijn juiste antwoord, je beroept je op onwetendheid om je foute
> antwoord te vergoeilijken, je legt me woorden in de mond, je zegt dat
> ik leuter en je schrijft krom nederlands. Wat moeten we hiermee? 

Quoten ipv op de man spelen met een bijna opzichzelf staande post?
En krom Nederlands, dit is een groep over programmeren, ik zie liever krom 
Nederlands, dan kromme code suggesties zoals: doe dit maar, want dat is 
defensief.

Anyway:


in sommige talen, als een variabele uit context gaat, dan wordt het object 
*direct* vernietigd, en dus (ervoor) de destructor aan geroepen.

Expliciete close nodig? Nee, want dit doet de destructor.


in andere talen, en VB.NET is volgens het artikel wat jij aanhaalde hier 
een van, wordt het object *niet* direct vernietigt, en dus blijft het 
bestand open staan tot het object door de garbage collector opgepikt 
wordt. In zo'n geval is een expliciete close een *MUST* als je niet het 
risico wilt lopen dat er te veel bestanden open blijven hangen.


Het er gewoon neerzetten omdat je geen idee hebt welke van de twee opgaat, 
maar je gewoon zeker wilt zijn, en dit ook nog eens defensief programmeren 
noemen is *fout*.

Mijn 1e reply was rammelde hier en daar, ik had e.e.a. expliciet moeten 
uitschrijven, mijn excuses daarvoor. Mijn standpunt m.b.t. defensief 
kloten blijft :-D.


-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#658
Author: Martijn Mulder
Date: Mon, 04 Sep 2006 23:33
41 lines
3345 bytes
>> Je doet het v��rkomen of jouw foute antwoord wellicht beter is dan
>> mijn juiste antwoord, je beroept je op onwetendheid om je foute
>> antwoord te vergoeilijken, je legt me woorden in de mond, je zegt dat
>> ik leuter en je schrijft krom nederlands. Wat moeten we hiermee?
>
> Quoten ipv op de man spelen met een bijna opzichzelf staande post?
> En krom Nederlands, dit is een groep over programmeren, ik zie liever krom
> Nederlands, dan kromme code suggesties zoals: doe dit maar, want dat is
> defensief.
>
> Anyway:
>
>
> in sommige talen, als een variabele uit context gaat, dan wordt het object
> *direct* vernietigd, en dus (ervoor) de destructor aan geroepen.
>
> Expliciete close nodig? Nee, want dit doet de destructor.
>
>
> in andere talen, en VB.NET is volgens het artikel wat jij aanhaalde hier
> een van, wordt het object *niet* direct vernietigt, en dus blijft het
> bestand open staan tot het object door de garbage collector opgepikt
> wordt. In zo'n geval is een expliciete close een *MUST* als je niet het
> risico wilt lopen dat er te veel bestanden open blijven hangen.
>
>
> Het er gewoon neerzetten omdat je geen idee hebt welke van de twee opgaat,
> maar je gewoon zeker wilt zijn, en dit ook nog eens defensief programmeren
> noemen is *fout*.
>
> Mijn 1e reply was rammelde hier en daar, ik had e.e.a. expliciet moeten
> uitschrijven, mijn excuses daarvoor. Mijn standpunt m.b.t. defensief
> kloten blijft :-D.


Ik schrijf de OP dat hij met 'Finally' de resources op de juiste manier 
de-alloceert, dat het niet - of het onjuist de-alloceren van resources in de 
.NET omgeving mogelijk geen schadelijke gevolgen heeft maar dat dat geen 
reden is om van de voorgeschreven methode af te wijken. En als een 
afterthought geef ik hem mee dat je met defensief programmeren meer kans 
hebt goed te gokken, ook als je geen idee hebt waar het over gaat. 
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#659
Author: Pugi!
Date: Tue, 05 Sep 2006 07:35
79 lines
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!
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#660
Author: 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
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#662
Author: Steven Spits
Date: Wed, 06 Sep 2006 07:29
14 lines
1786 bytes
"Martijn Mulder" schreef:

> De if Not (...) Then ... End If kan je veilig weglaten: If Close() has 
> already been called, no action is performed.

Heb je de code wel gelezen? Hij had in z'n comments de reden staan.

Als het "xmlrdr  = New XmlTextReader()" stukje faalt (bv file bestaat niet), 
dan komt-ie in de finally block waarbij "xmlrdr" null is. Met jou code zal 
je een "Reference not set to an instance of an object" krijgen.

Steven

- - -
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#664
Author: Martijn Mulder
Date: Wed, 06 Sep 2006 08:41
17 lines
1698 bytes
>> De if Not (...) Then ... End If kan je veilig weglaten: If Close() has 
>> already been called, no action is performed.

> Heb je de code wel gelezen? Hij had in z'n comments de reden staan.
>
> Als het "xmlrdr  = New XmlTextReader()" stukje faalt (bv file bestaat 
> niet), dan komt-ie in de finally block waarbij "xmlrdr" null is. Met jou 
> code zal je een "Reference not set to an instance of an object" krijgen.


Je hebt gelijk.

If Not (xmlrdr Is Nothing)
    xmlrdr.Close()
End If

moet erbij 
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#665
Author: Dr.Ruud
Date: Wed, 06 Sep 2006 11:22
29 lines
2119 bytes
Martijn Mulder schreef:
> [attribution dammit] Steven:
>> [attribution dammit] Martijn:

>>> De if Not (...) Then ... End If kan je veilig weglaten: If Close()
>>> has already been called, no action is performed.
>>
>> Heb je de code wel gelezen? Hij had in z'n comments de reden staan.
>>
>> Als het "xmlrdr  = New XmlTextReader()" stukje faalt (bv file bestaat
>> niet), dan komt-ie in de finally block waarbij "xmlrdr" null is. Met
>> jou code zal je een "Reference not set to an instance of an object"
>> krijgen.
>
> Je hebt gelijk.
>
> If Not (xmlrdr Is Nothing)
>     xmlrdr.Close()
> End If
>
> moet erbij

Ik kan me nog steeds niet voorstellen dat de Close niet al automatisch
gebeurt, en wel direct bij het out-of-scope raken van xmlrdr.

-- 
Affijn, Ruud

"Gewoon is een tijger."
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#666
Author: Martijn Mulder
Date: Wed, 06 Sep 2006 11:41
61 lines
3428 bytes
Hoi Puigi, hier een voorbeeldje van het correct gebruik van de XMLTextReader 
class, van de msdn site van Microsoft. Volgens mij zit jij er niet ver 
naast.

http://msdn2.microsoft.com/en-us/library/1af7xa52.aspx
The following example reads an XML file and displays each of the nodes.

Option Strict
Option Explicit

Imports System
Imports System.IO
Imports System.Xml

'Reads an XML document
Public Class Sample
    Private Const filename As String = "items.xml"

    Public Shared Sub Main()
        Dim reader As XmlTextReader = Nothing

        Try
            ' Load the reader with the data file and ignore all white space 
nodes.
            reader = New XmlTextReader(filename)
            reader.WhitespaceHandling = WhitespaceHandling.None

            ' Parse the file and display each of the nodes.
            While reader.Read()
                Select Case reader.NodeType
                    Case XmlNodeType.Element
                        Console.Write("<{0}>", reader.Name)
                    Case XmlNodeType.Text
                        Console.Write(reader.Value)
                    Case XmlNodeType.CDATA
                        Console.Write("<![CDATA[{0}]]>", reader.Value)
                    Case XmlNodeType.ProcessingInstruction
                        Console.Write("<?{0} {1}?>", reader.Name, 
reader.Value)
                    Case XmlNodeType.Comment
                        Console.Write("<!--{0}-->", reader.Value)
                    Case XmlNodeType.XmlDeclaration
                        Console.Write("<?xml version='1.0'?>")
                    Case XmlNodeType.Document
                    Case XmlNodeType.DocumentType
                        Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, 
reader.Value)
                    Case XmlNodeType.EntityReference
                        Console.Write(reader.Name)
                    Case XmlNodeType.EndElement
                        Console.Write("</{0}>", reader.Name)
                End Select
            End While

        Finally
            If Not (reader Is Nothing) Then
                reader.Close()
            End If
        End Try
    End Sub 'Main
End Class 'Sample
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#667
Author: John Bokma
Date: Wed, 06 Sep 2006 19:01
12 lines
1671 bytes
"Dr.Ruud" <rvtol+news@isolution.nl> wrote:
 
> Ik kan me nog steeds niet voorstellen dat de Close niet al automatisch
> gebeurt, en wel direct bij het out-of-scope raken van xmlrdr.

Als ik mij het heeeel goed herinner is dat bij Java *niet* het geval.

-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#668
Author: Dr.Ruud
Date: Wed, 06 Sep 2006 20:23
15 lines
1677 bytes
John Bokma schreef:
> Dr.Ruud:

>> Ik kan me nog steeds niet voorstellen dat de Close niet al
>> automatisch gebeurt, en wel direct bij het out-of-scope raken van
>> xmlrdr.
>
> Als ik mij het heeeel goed herinner is dat bij Java *niet* het geval.

Dan zal .Net dat daar wel van overgenomen hebben. <g>

-- 
Affijn, Ruud

"Gewoon is een tijger."
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#669
Author: John Bokma
Date: Wed, 06 Sep 2006 22:24
20 lines
1881 bytes
"Dr.Ruud" <rvtol+news@isolution.nl> wrote:

> John Bokma schreef:
>> Dr.Ruud:
> 
>>> Ik kan me nog steeds niet voorstellen dat de Close niet al
>>> automatisch gebeurt, en wel direct bij het out-of-scope raken van
>>> xmlrdr.
>>
>> Als ik mij het heeeel goed herinner is dat bij Java *niet* het geval.
> 
> Dan zal .Net dat daar wel van overgenomen hebben. <g>

Kan heel goed :-)

-- 
John Bokma
                 Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Ervaren Perl / Java programmeur beschikbaar:  http://castleamber.com/
Tevreden opdrachtgevers:     http://castleamber.com/testimonials.html
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#670
Author: Stefan Arentz
Date: Thu, 07 Sep 2006 06:38
15 lines
1751 bytes
John Bokma <john@castleamber.com> writes:

> "Dr.Ruud" <rvtol+news@isolution.nl> wrote:
>  
> > Ik kan me nog steeds niet voorstellen dat de Close niet al automatisch
> > gebeurt, en wel direct bij het out-of-scope raken van xmlrdr.
> 
> Als ik mij het heeeel goed herinner is dat bij Java *niet* het geval.

Dat klopt. Finalizers zijn onvoorspelbaar en implementatie
afhankelijk. Als je totale controle wil dan kan je het beste
zelf close() aanroepen. Mogelijk is dat op .Net net zo, maar
zeker weten doe ik dat niet :-)

 S.
Re: [VB.NET] worden objecten gesloten (resources vrijgegeven) na exception ?
#671
Author: Stefan Arentz
Date: Thu, 07 Sep 2006 06:43
39 lines
2798 bytes
Stefan Arentz <stefan.arentz@gmail.com> writes:

> John Bokma <john@castleamber.com> writes:
> 
> > "Dr.Ruud" <rvtol+news@isolution.nl> wrote:
> >  
> > > Ik kan me nog steeds niet voorstellen dat de Close niet al automatisch
> > > gebeurt, en wel direct bij het out-of-scope raken van xmlrdr.
> > 
> > Als ik mij het heeeel goed herinner is dat bij Java *niet* het geval.
> 
> Dat klopt. Finalizers zijn onvoorspelbaar en implementatie
> afhankelijk.

Voor de duidelijkheid: een finalizer is dus niet een finally block maar
een finalize() methode op een object :-)

En: http://msdn.microsoft.com/msdnmag/issues/1100/gci/

 To get a resource to clean up properly, the developer must write
 code that knows how to properly clean up a resource. In the .NET
 Framework, the developer writes this code in a Close, Dispose, or
 Finalize method, which I'll describe later. However, as you'll
 see later, the garbage collector can determine when to call this
 method automatically.

 Also, many types represent resources that do not require any
 cleanup. For example, a Rectangle resource can be completely
 cleaned up simply by destroying the left, right, width, and
 height fields maintained in the type's memory. On the other
 hand, a type that represents a file resource or a network
 connection resource will require the execution of some
 explicit clean up code when the resource is to be
 destroyed.

Zelfde idee als in Java dus. En het was toch VB.NET waar de OP
mee bezig was?

 S.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads