I've been profiling the memory of my windows forms application which dynamically loads many WPF Image Viewer controls in an element host. It then disposes of them to load a new set etc.
I managed to discover a memory leak, and fixed it, however, even though i call GC.Collect(), the memory in task manager etc remains high, until i load more images, at which point it momentarily drops, and then raises again. I'm assumign that because the mory is now needed, .NET is removing it from the large heap, and then using it for the new image data.
If however i have the profile attached, and click on the Take Memory Snapshot button (Which, from your documentation calls GC.Collect() before collecting its data), the memory usage drops right down, as if its also clearing the data in the alrge heap.
Are you only using GC.Collect(), or is there anythign else yuou are doing that i could in my code to have the same affect of the actual memory use reducing in task manager?