Looking through your code, I'm wondering if there is a leak related to the projection map. I'm having difficulty identifying where the projected biome map is getting cached. It looks to me like any time GameEvents.onDominantBodyChange or GameEvents.onVesselChanged triggers and the new body is not the current body, the projected biome map is regenerated. Since 'current' is set to null prior to beginning generation, if onDominantBodyChange is sent with from==to (e.g. Kerbin to Kerbin) then the map would get regenerated. It also looks like the map generation will get restarted any time that onVesselChange triggers, even within the same SOI, for the same reason. If GameEvents.onDominantBodyChange is triggered when going from the space center to the launchpad, and the space center is considered to have a null dominant body, it looks like the projected biome map will get regenerated. It's possible I was mistaken about where the memory leak happens - it could happen when going to the launch pad, but I only was able to notice it when returning to the space center. It's worth noting that the launch scene uses less memory than the space center scene, so that could be obfuscating where the leak is really happening. (Sorry if I'm reading the code wrong - I haven't developed in C# before, and my Java experience doesn't translate 1:1) On a related note, does UnityEngine's Texture2D implementation handle resource disposal automagically with GC? If not, then the projectedMap needs to be disposed/destroyed prior to being set to null so that the underlying resource doesn't stick around indefinitely. Even if GC should handle the resource, a leak could occur if something prevents the Texture2D object from being collected. I didn't see anything in your code that explicitly allowed the object to be held on indefinitely, but it could be happening somewhere else (maybe Unity itself? I've heard that its resource garbage collection is iffy). It's also possible that there's some wonkiness with the C# iterator function causing it to hold on to the resource when it gets interrupted. It might be worth trying manually collecting (dispose/destroy) the projection map prior to unsetting it just to see if that fixes the leak.