C# XNA:卸载()的意义是什么?

C# XNA:卸载()的意义是什么?,c#,memory-management,xna,C#,Memory Management,Xna,XNA游戏有一个Unload()方法,其中内容应该被卸载。但这有什么意义呢?如果所有内容都被卸载,那么游戏必须退出,在这种情况下,所有内容都将被垃圾收集,对吗?你自己清理后总是礼貌的……否则人们会停止让你玩他们的玩具 我的最佳猜测是,它将允许您将游戏对象嵌套到项目中,并提供一种稍后清理它们的方法。这将允许更好地重用代码。希望XNA MPV或XNA团队的某个人能够发现这一点并提供更多的见解。据我所知,它对于任何标准用途都没有用处,因为正如你所说,垃圾收集器为你处理事情 然而,当你的游戏因为很多事情

XNA游戏有一个
Unload()
方法,其中内容应该被卸载。但这有什么意义呢?如果所有内容都被卸载,那么游戏必须退出,在这种情况下,所有内容都将被垃圾收集,对吗?

你自己清理后总是礼貌的……否则人们会停止让你玩他们的玩具


我的最佳猜测是,它将允许您将
游戏
对象嵌套到项目中,并提供一种稍后清理它们的方法。这将允许更好地重用代码。希望XNA MPV或XNA团队的某个人能够发现这一点并提供更多的见解。

据我所知,它对于任何标准用途都没有用处,因为正如你所说,垃圾收集器为你处理事情


然而,当你的游戏因为很多事情退出时,有一个名为的事件是很有用的。例如,您可以向多人游戏中的所有客户端发送一条消息,告诉他们您正在退出,然后您可以让垃圾收集器终止您的网络连接。

卸载有时是必要的,尤其是在使用未通过垃圾收集器卸载的库时。 XACT就是一个例子。我记得在卸载事件中必须销毁负责XACT音乐的对象,在一个特定的情况下,该对象没有被GC销毁。。。但我忘了实际情况

然而,更重要的是,UnloadContent方法用于GameComponent类而不是Game类。通常,GameComponent和DrawableGameComponent对象可以使用多种资源。当对象被销毁时,您必须确保与该对象相关的所有资源都已销毁、释放或有时处于挂起状态


我建议你暂时别管它。随着XNA开发的推进,对于更大规模的项目,您可能需要使用Unload方法,并了解您需要的特定情况。

下一个
游戏
对象意味着什么?即使这样,它也不太有用,毕竟,一旦游戏对象被垃圾收集,内容管理器将被收集,因此它所管理的所有内容也将被收集。除非内容管理器内置了某种静态缓存,即使在关闭游戏对象后,它也会保留对任何加载内容的引用。如果你有复杂的关卡,让每个关卡卸载所有相关内容也会很有用,这样可以减少你在内存中留下的垃圾堆。游戏和游戏控制台不是典型的计算机应用程序。它们需要更干净、响应更快。关闭程序时,所有对象都将被卸载,这并不意味着你不应该使用
IDisposable.Dispose()
使用(…)
方法。你也可以覆盖受保护的Game1.OnExiting事件方法来实现这一点。例如,使用OnExiting在游戏结束时发送消息更有意义。