For details of what resources can be accessed from a finalizer see
section "3.6 Implementation of Finalize-Time" in the following white
paper:

http://www.gotdotnet.com/team/libraries/whitepapers/resourcemanagement/r
esourcemanagement.aspx 

Executive summary: Be very carful avout what you access in your
finalizer and in general only use this to clean up native resources,
e.g. handles that you may have opened.

Nicko

> -----Original Message-----
> From: Aaron Morton [mailto:[EMAIL PROTECTED] 
> Sent: 24 February 2006 11:27
> To: Log4NET User
> Subject: Re: logging not possible in finalizer on application 
> shutdown?
> 
> You should not be doing things like logging when the 
> finalizer is running. It is entirely possible that the logger 
> your code is trying to call (or the objects it uses) has been 
> garbage collected by the time your finalizer is called, or at 
> the very least it has been marked for GC.
> 
> This is from the link you sent...
> "If disposing equals false, the method has been called by the 
> runtime from inside the finalizer and only unmanaged 
> resources can be disposed. When an object is executing its 
> finalization code, it should not reference other objects, 
> because finalizers do not execute in any particular order. If 
> an executing finalizer references another object that has 
> already been finalized, the executing finalizer will fail."
> 
> So the short answer is don't try to log when called from the 
> finalizer because the logger is in an unknown state. 
> 
> aaron
> 
> Michael Hinkel wrote: 
> 
>       All,
>        
>       I'd like to log some information in a
>        
>         protected virtual void Dispose(bool disposing)
>        
>       method which can be called either by Dispose() or by 
> the finalizer
>       (implemented according to Microsoft's proposal 
> "Implementing a Dispose
>       Method"; see
>       
> ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/cpguide/html/cp
> conimpleme
>       ntingdisposemethod.htm).
>       
>       If Dispose(bool disposing) is called by Dispose() 
> everything works fine,
>       but if the method is calld by the finalizer on 
> application shutdown, no
>       log entry is created. If I use a 
> Console.WriteLine(message) the message
>       is sent to the Console even on application shutdown.
>       
>       Any suggestions?
>       
>       
>       Michael 
>       
>       _______________________________________
>       DATATRAK Deutschland GmbH
>       Michael Hinkel
>       Software Developer
>       Rochusstrasse 65
>       53123 Bonn
>       
>       http://www.datatrak.net
>         
>       
>       
>         
> 
> 
> 

Reply via email to