In a title “Forcing a Garbage Colection” from book “C# 2010 and the .NET 4 Platform” by Andrew Troelsen written:
“Again, the whole purpose of the .NET garbage collector is to manage memory on our behalf. However, in some very rare circumstances, it may be beneficial to programmatically force a garbage collection using GC.Collect(). Specifically:
• Your application is about to enter into a block of code that you don’t want interrupted by a possible garbage collection.
…
“
But stop! Is there a such case when Garbage Collection is undesirable? I never saw/read something like that (because of my little development experience of course). If while your practice you have done something like that, please share. For me it’s very interesting point.
Thank you!
I run a recipe related website, and I store a massive graph of recipes and their ingredient usage in memory. Due to the way I pivot this information for quick access, I have to load several gigs of data into memory when the application loads before I can organize the data into a very optimized graph. I create a huge amount of tiny objects on the heap that, once the graph is built, become unreachable.
This is all done when the web application loads, and probably takes 4-5 seconds to do. After I do so, I call
GC.Collect();because I’d rather re-claim all that memory now rather than potentially block all threads during an incoming HTTP request while the garbage collector is freaking out cleaning up all these short lived objects. I also figure it’s better to clean up now since the heap is probably less fragmented at this time, since my app hasn’t really done anything else so far. Delaying this might result in many more objects being created, and the heap needing to be compressed more when GC runs automatically.Other than that, in my 12 years of .NET programming, I’ve never come across a situation where I wanted to force the garbage collector to run.