[英]Should I implement a Dispose method?
我班上的變量:
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
對象?
是的,您最好通過IDisposable接口實現Dispose方法,以便處理Texture2D對象和其他一次性對象。
不需要實現的是終結器 (如果您忘記調用dispose方法,則垃圾回收將調用該方法),因為只有托管的資源可以實現自己的終結器,以防它們未正確處理。 。
如果您不自己處置它們,則Texture2D對象最終將由垃圾收集器處置,但這具有嚴重的性能和內存缺陷。 讓垃圾收集處理此問題將大大延遲清理這些對象,並且如果生成它們的速度足夠快,甚至可能會使程序崩潰。
可能有一個例外:如果只創建一個或幾個類的實例,並保留這些實例直到程序終止,則實現dispose方法可能不會帶來可觀的收益。 當程序終止時,所有這些紋理都將被丟棄。 盡管如此,手動放置這些對象仍然是一種好習慣。
編輯:
關於XNA資源,可能有一些我不太熟悉的特殊考慮; 為此,我會請您參考起泡器的答案
由於您使用的是XNA
/ MonoGame
(由於庫的相似性而包含在內),因此您只需手動處置(不是通過內容管道)資源(通過Dispose
方法或using
塊)。
有關如何處理此類問題的快速閱讀,請嘗試以下方法 。
基本上,如果從管道中提取內容,則調用Content.Unload
或在多個ContentManager
之間划分內容。
另外,我鏈接的教程實際上是一組相當活躍的教程。 但是,只有一個人維護該站點,因此Monogame
教程之類的東西被推后爐,而使用java
教程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.