Question: I found out that render targets in c# / xna are not automatically disposed of, and you have to call the .dispose() member to get rid of them.

I thought garbage collection was suppose to automatically get rid of things after all their references are gone, what gives?

Is there anything else that is not disposed of automatically?

Answer: 
The reason that `IDisposable` exists is to support exceptional cases where the garbage collection can't [effectively] manage an objects memory. The primary reason for it's existence is for releasing unmanaged resources. 

One of the common cases of this is interaction with unmanaged memory. When an object is doing something that involves allocating memory outside of the scope of the garbage collector then the garbage collector can't be responsible for cleaning it up; it needs to be handled by the programmer. These cases also have a higher probability of allocating large amounts of memory, making it that much more important to ensure that it is cleaned up more quickly.

It is also used in cases where an object has some sort of "clean up" that it needs to do other than actually freeing memory. Examples are file handers when dealing with IO, or connections to a database that should be closed. Having the garbage collector free the memory for the object won't perform this type of cleanup.

There are also cases where programmers use the `IDisposeable` interface to "hijack" onto the syntax for the `using` statement and don't actually have unmanaged resources disposed in it's dispose method.
My opinion is that if an object has a Dispose method, it probably needs to be disposed. I usually try to put it in a block with a 'using' statement. This will automatically call the Dispose method at the end of the block.