Hi,
first make sure that you no longer have any refernces to the image or thumbnail i.e. set pictureBox1.Image = null If you have any references then the GC will not be able to collect up these images. Secondly just because you call Dispose on an object does not mean the memory will be freed. What really needs to happen is for the GC to run but this is undeterministic it will run when it thinks it needs to run so it is perfectly acceptable for you memory use to continue increasing until the GC thinks it is necessary to reclaim what it can. If you really want to find out if you have a leak you can force the GC by calling:
GC.Collect();
GC.WaitForPendingFinalizers();
Making sure that you have no references to any of your images and that you previously called Dispose on all of the objects (if you did not then it will take 2 GC calls to clean up the associated objects due to the finalizers being run)
You should now see your memory usage go down. However there is no need to call this method in real life since the GC will run when it wants to an normally it knows best. You can also use the CLR Profiler (search for it) that will show you exactly how much memory you application is taking and the types of objects that are using the memory.
Mark.