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.