A: 

I think it has to do with images - the underlying object of Image class is unmanaged, because of this memory consumed by them is not included in GC counters.

They also require extra care about how you dispose of them - managed memory consumption of them is very low so GC does not really pay attention, but the unamanged memory - you can see it.

The bottom line - it is not enough to let them go out of scope, you have to explicitly call dispose on them when you are done.

mfeingold
There is no Dispose() method in BitmapImage class.
mephisto123
+1  A: 
mephisto123
@Dmitry: You should mark the answer as the accepted answer. If this was a "reply" to Nymaen's answer, you shoudl mark that answer as the accepted one (click the check), and include this as a Comment, not as a separate answer...
Reed Copsey
A: 

I suspect that BitmapCacheOption.OnLoad is adding the images to the Framework's memory footprint, but since you do not own the objects in the image cache, they do not appear in the results from GC method calls. Try using BitmapCacheOption.None instead and see if that solves your memory issues. Note: Doing this will have a drastic performance impact.

Nymaen