What resources have to be manually cleaned up in C# and what are the consequences of not doing so?
For example, say I have the following code:
myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black); // Use Brush
If I don’t clean up the brush using the dispose method, I’m assuming the garbage collector frees the memory used at program termination? Is this correct?
What other resources do I need to manually clean up?
Technically anything that inherits from IDisposable should be proactively disposed. You can use the ‘using’ statement to make things easier.
http://msdn.microsoft.com/en-us/library/yh598w02.aspx
Sometimes you will see inconsistent use of IDisposable derived objects in documentation sample code as well as code that is generated by tools (i.e. visual studio).
What’s nice about IDisposable is that it gives you the ability to proactively release the underlying unmanaged resource. Sometimes you really want to do this – think network connections and file resources for example.