我使用C#(使用XNA 4和MonoGame)。我使用Content Manager的Load()
方法加载资源(纹理,音频)。当不再需要这些资产时,我如何从记忆中正确地Unload()
?
我假设一旦对所加载资产的所有引用都被覆盖(或设置为null),垃圾收集器就会自动删除这些资产。这是正确的还是资产仍然被锁定,因为它们是通过ContentManager加载的?
是否需要调用'ContentManager.Unload()'来释放特定CM的资产?
答案 0 :(得分:4)
是的,如果您希望内容管理器中的资产从内存中完全卸载,则需要调用Unload()
。除了清除内容管理器的内部缓存(其中包含对您已加载的所有内容的引用)之外,它还将在任何实现Dispose()
的资源上调用IDisposable
。
请注意,ContentManager
维护内部资源缓存的原因是因为加载两次相同的资源并不会实际上加载两次相同的资源:第二次,它将只需提交缓存的对象引用即可。