XNA纹理垃圾收集

我用一个

Dictionary<string, Texture2D> 

用于存储纹理,并且游戏中的每个纹理都是对该字典中纹理的引用。 但是,当所有的引用都没有了,GC是否会处理纹理(我不这么认为,因为它们仍然可以访问)?

如果没有,我如何计算纹理的引用,以便我可以手动处理它们?

由于纹理是非托管资源,因此不能像大多数对象那样进行垃圾收集。 改为使用ContentManager来执行此任务。 一旦你想释放一个内容管理器的纹理,你应该调用Unload(); 喜欢这个:

 Texture2D apple = Content.Load<Texture2D>("apple"); //Content is the default Content manager //... //When you don't need them: Content.Unload(); //removes every loaded texture which were loaded with this content manager. 

所以你可以创建多个ContentManagers,例如一个用于主菜单,一个用于游戏屏幕,并加载相关资源。