The .NET Framework's garbage collector manages the allocation
and release of memory for your application. Each time you create
an object, the runtime allocates memory for the object from the
managed heap. As long as address space is available in the
managed heap, the runtime continues to allocate space for new
objects. However, memory is not infinite. Eventually the garbage
collector must perform a collection in order to free some
memory. The garbage collector's optimizing engine determines the
best time to perform a collection, based upon the allocations
being made. When the garbage collector performs a collection, it
checks for objects in the managed heap that are no longer being
used by the application and performs the necessary operations to
reclaim their memory.