Chapter 12. Disposal and Garbage Collection
Some objects require explicit tear-down code to release resources
such as open files, locks, operating system handles, and unmanaged
objects. In .NET parlance, this is called disposal, and it is supported through the
IDisposable
interface. The managed memory occupied
by unused objects must also be reclaimed at some point; this function is
known as garbage collection and is performed by the
CLR.
Disposal differs from garbage collection in that disposal is usually explicitly instigated; garbage collection is totally automatic. In other words, the programmer takes care of such things as releasing file handles, locks, and operating system resources while the CLR takes care of releasing memory.
This chapter discusses both disposal and garbage collection, also describing C# finalizers and the pattern by which they can provide a backup for disposal. Lastly, we discuss the intricacies of the garbage collector and other memory management options.
IDisposable, Dispose, and Close
The .NET Framework defines a special interface for types requiring a tear-down method:
public interface IDisposable { void Dispose(); }
C#’s using
statement provides a
syntactic shortcut for calling Dispose
on objects that implement IDisposable
, using a try
/finally
block. For example:
using (FileStream fs = new FileStream ("myFile.txt", FileMode.Open)) { // ... Write to the file ... }
The compiler converts this to:
FileStream fs = new FileStream ("myFile.txt", FileMode.Open); try ...
Get C# 4.0 in a Nutshell, 4th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.