我班级的变量:
protected List<Texture2D> textures_ = new List<Texture2D>();
protected Color fill_color_ = Color.White;
private int move_amount_ = 1;
private const int total_move_amount_ = 40;
private float current_move_amount_ = 0;
private bool moving_ = false;
protected static Random random_ = new Random();
protected Vector2 size_ = new Vector2(40.0f, 0);
我应该实施Dispose
方法,还是管理资源?特别是Texture2D
个对象?
答案 0 :(得分:3)
是的,你应该实现一个Dispose方法,理想情况是通过IDisposable接口,以便处理你的Texture2D对象和其他一次性用品。
您不需要实现的是finalizer(如果您忘记调用dispose方法,将由垃圾收集调用的方法),因为您只有实现自己的终结器的托管资源如果他们没有妥善处理。
最终,垃圾收集器将处理Texture2D对象,如果您不自行处理它们,但这会带来严重的性能和内存缺陷。让垃圾收集处理这将大大延迟这些对象的清理,如果你足够快地生成它们甚至可能会导致程序崩溃。
可能有一个例外:如果您只创建一个或几个类的实例,并将这些实例保留到程序终止之前,您可能无法通过实施dispose方法获得可衡量的好处。程序终止后,所有这些纹理都将被丢弃。尽管如此,手动处理这些物体仍是一种很好的做法。
编辑:
对于我不熟悉的XNA资源可能有一些特殊的考虑因素;为此我会把你推荐给bubbinator的回答
答案 1 :(得分:1)
由于您使用XNA
/ MonoGame
(由于库的相似性而包含),您只需手动处理资源(通过Dispose
方法或using
块)不是来自内容管道。
有关如何处理此类内容的快速阅读,请尝试this。
基本上,如果您从管道中提取内容,请拨打Content.Unload
或在多个ContentManager
之间划分内容。
另外,我链接的教程实际上是一组相当活跃的教程。但是,只有一个人维护网站,所以像Monogame
教程这样的东西被推到了后面,有利于java
教程。