XNA ContentManager如何处理内存

XNA ContentManager如何处理内存,xna,content-management,Xna,Content Management,我的问题标题不清楚[我写不清楚] e、 gTexture2D picture=Content.Load(“myPicture”) 如果上面的代码运行,内存会发生什么情况?据我所知,内容将“myPicture”缓存到内存中,并返回对Texture2D图片的引用。我错了吗?如果“myPicture”加载到另一个Texture2D对象,则“myPicture”不会重复,因此它只返回一个引用 是否将每个文件(或内容文件)加载到缓存到内存(也分配到Ram)的内容上而不进行复制?(我认为这是我的问题,上面写

我的问题标题不清楚[我写不清楚]


e、 g
Texture2D picture=Content.Load(“myPicture”)

如果上面的代码运行,内存会发生什么情况?据我所知,内容将“myPicture”缓存到内存中,并返回对Texture2D图片的引用。我错了吗?如果“myPicture”加载到另一个Texture2D对象,则“myPicture”不会重复,因此它只返回一个引用

是否将每个文件(或内容文件)加载到缓存到内存(也分配到Ram)的内容上而不进行复制?(我认为这是我的问题,上面写的都应该检查一下)


谢谢

ContentManager的每个实例将只加载一次给定的资源。第二次请求资源时,它将返回上次返回的实例

ReferenceEquals(Content.Load<Texture2D>("something"),
                Content.Load<Texture2D>("something")) == true
ReferenceEquals(Content.Load(“某物”),
Content.Load(“某物”)==true
为此,
ContentManager
维护一个它在内部加载的所有内容的列表。此列表阻止垃圾收集器清理这些资源,即使您没有使用它们

要卸载资源并清除该内部列表,请调用
ContentManager.unload
。这将释放加载的资源正在使用的内存。现在,如果您再次请求相同的资源,它将被重新加载

当然,如果您在调用
Unload
时正在使用这些资源,那么您加载的所有共享实例都将被释放并且不可用


最后,不要调用
ContentManager.Load中的
Dispose
,因为这会破坏正在共享的所有实例,并在
ContentManager
稍后尝试在
卸载中处置它们时导致问题。

谢谢您的帖子!更重要的是,加载的资源保存在内存中,对吗?(你那句关于卸载的话让我明白了,但我又问了一次,我的英语不够好,不能完全理解。)恐怕我听不懂你的问题;运行这一行后,myPicture被加载到内存(到计算机的ram),其引用通过内容返回到Texture2D实例picture。->对还是错?谢谢