My question is not clear at title [i can not write it exactly]
e.g Texture2D picture = Content.Load<Texture2D>("myPicture");
what does happen on memory if the code above runs ? As I know Content caches the "myPicture" to the memory and return a reference to the Texture2D picture. Am I wrong ? If "myPicture" is loaded to another Texture2D object "myPicture" is not duplicated so it returns only a reference.
Is each file (or content-file) loaded over Content cached to memory (also allocated on Ram) without duplicating ? (i believe this my question with all written above should be checked)
Thanks !
Each instance of
ContentManager
will only load any given resource once. The second time you ask for a resource, it will return the same instance that it returned last time.To do this,
ContentManager
maintains a list of all the content it has loaded internally. This list prevents the garbage collector from cleaning up those resources - even if you are not using them.To unload the resources and clear that internal list, call
ContentManager.Unload
. This will free up the memory the loaded resources were using. Now if you ask for the same resource again - it will be re-loaded.Of course, if you are using those resources when you call
Unload
, all of those shared instances that you loaded will be disposed and unusable.Finally, don't call
Dispose
on anything that comes out ofContentManager.Load
, as this will break all the instances that are being shared and cause problems whenContentManager
tries to dispose of them inUnload
later on.