[Gtk-sharp-list] widget destruction

Lluis Sanchez Gual slluis.devel at gmail.com
Thu Mar 10 09:23:10 EST 2011


El dc 09 de 03 de 2011 a les 10:54 -0500, en/na Nicholas Frechette va
escriure:
> On Wed, Mar 9, 2011 at 6:39 AM, Lluis Sanchez Gual
> <slluis.devel at gmail.com> wrote:
>         Subclasses may need to free their own unmanaged resources,
>         which may not
>         be related to gtk at all. For example, I could implement a
>         widget
>         subclass which pinvokes a C api to get some data, which has to
>         be
>         explicitly freed. I would free that data in the finalizer, but
>         since the
>         finalizer will not be called if the object is explicitly
>         disposed, I
>         also have to free that data in the Dispose method. So, I will
>         end having
>         a DeleteMyData method which is called from the finalizer and
>         from
>         Dispose.
>         
>         The Dispose pattern provides an standard solution to the above
>         scenario.
>         It states the need for a Dispose(bool disposing) method, to be
>         called
>         from Dispose and from the finalizer. The 'disposing' parameter
>         is 'true'
>         when calling from Dispose, meaning that it is safe to access
>         other
>         reference objects, and it is 'false' when called from the
>         finalizer,
>         meaning that only unmanaged data should be accessed.
>         
>         There is some documentation about this pattern here:
>         
>         http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx
>         
>         
>         
> 
> I disagree strongly with the implicit destruction of managed resources
> through the use of that pattern and the finalizer. Having worked
> extensively on embedded systems where tight control over memory is
> always required, in my experience, it is always better to provide
> tools for programmers to fix bad usage than it is to brush it under
> the rug and do their job for them. The finalizer should be there only
> to warn that memory is leaking and if you must, free that memory, but
> the warning is key so that the code can be fixed. Finalizers add a
> cost that can be very hard to measure.

I have no experience in embedded systems, so I can't tell much about it,
but I'm pretty sure that the kind of applications you can build with
GTK# don't have the same memory constraints that an embedded system has.
So forcing developers to micro-manage the memory of the application when
in many cases the GC would do the job just fine looks a bit unproductive
to me.

Lluis.





More information about the Gtk-sharp-list mailing list