Q:

When to Dispose Textures

I recently realized Texture2D implements IDisposable, and now (while trying to track down a memory leak) wonder about where and when I should dipose this.
My current architecture is that I have a SpriteComponent instance which encapsulates and hides the Texture2D. Internally, when I switch screens (eg. MainMenuScreen => WorldMapScreen), I call Dispose on the current screen, which calls dispose on the entities, which calls dispose on the textures.
But this results in some wacked-out behaviour, like textures apprearing super zoomed in momentarily, or appearing black, or appearing as garbage image data.
So my question is really, when should I call Dispose on Texture2Ds? 
(FYI, I also can switch to a screen, and then later switch back to it, which currently causes me to reload the sprites, and by proxy, the textures.)

A:

Well, the obvious answer, dispose of them only when you're completely done with them. If you know a screen will not be loaded again in a certain session of a game, it's safe to unload the textures used exclusively in that screen.
If all the textures or most of the textures are going to change, you may want to unload them to make room for the new textures. However, if you're not over your memory budget, there's no reason to unload textures that may be used again.
Edits from comments: For most games, unless you're loading a huge amount of textures, it's normal to load the textures up-front and keep them loaded for the entire play session. Disposing and re-loading is probably expensive, and it's simpler to just leave them in memory.

