Like the Rules of Optimization, there are two rules to follow for the touching .NET's Garbage Collector: (1) Don't, and (2) Be careful (for experts only). Most memory-related problems that developers experience in .NET do not require intervention of GC, but more an injection of sane code.

Joe's coworker — and self-proclaimed expert — was getting some pesky OutOfMemoryException errors while cloning objects. Knowing that it had to be a problem with garbage collection, he concocted this innovative solution.

public static IClonable SafelyClone(IClonable a)
{
    IClonable b = a;
    for (int i = 0; i < 10; i++)
    {
        try
        {
            b = a.Clone();
            break;
        }
        catch (OutOfMemoryException)
        {
            GC.Collect(GC.MaxGeneration);
            GC.WaitForPendingFinalizers();
        }
    }
    return b;
}

Why 10? To be extra, extra, extra, extra, extra, extra, extra, extra, extra sure that there's free memory.