XNA:Unload()的作用是什么?

6

XNA游戏具有一个名为Unload()的方法,该方法用于卸载内容。但是这有什么意义呢?如果所有内容都被卸载,那么游戏必须退出,在这种情况下,所有内容都将被垃圾回收,对吧?

3个回答

6
据我理解,在任何标准用途上都没有什么用处,因为正如您所说,垃圾回收器会自动处理这些事情。
但是,在许多方面,在游戏退出时调用事件非常有用。例如,您可以向多人游戏中的所有客户端发送一条消息,告诉他们您正在退出,然后让垃圾回收器关闭您的网络连接。

1
仅仅因为在关闭程序时所有对象都会被卸载,这并不意味着你不应该使用 IDisposable.Dispose() 或者 using (...) - Matthew Whited
你也可以重写受保护的Game1.OnExiting事件方法来实现这一点。使用OnExiting更有意义,例如在游戏关闭时发送消息。 - Daniel G

2

礼貌的做法是在你使用完后清理干净……否则人们就不会再让你玩他们的玩具了。

我的最佳猜测是,它可以让您将Game对象嵌套到您的项目中,并为您提供一种稍后清理它们的方法。这将有助于更好地重用您的代码。希望XNA MPV或来自XNA团队的其他人能找到它并提供更多见解。


“next” 一个 Game 对象是什么意思? - Nick Heiner
1
即使如此,它也不是很有用,毕竟一旦游戏对象被垃圾回收,内容管理器将被回收,因此它所管理的所有内容也将被回收。 - Martin
2
除非内容管理器内置某种静态缓存,可以在关闭游戏对象后仍保留对任何加载的内容的引用。如果您有复杂的关卡,将每个关卡卸载其所有相关内容以减少在内存中留下的垃圾堆也可能很有用。游戏和游戏控制台不是您典型的计算机应用程序。它们需要更加清洁和响应迅速。 - Matthew Whited

1

卸载有时是必要的,特别是当使用不通过垃圾回收器卸载的库时。一个例子是XACT。我记得在某个特定情况下,在Unload事件中销毁负责XACT音乐的对象,因为该对象没有被GC销毁...但我忘记了实际情况...

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

我建议你暂时不要去管它。随着你进行XNA开发和规模更大的项目,你可能需要使用Unload方法,并了解需要使用该方法的某些情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接