簡體   English   中英

我應該實現Dispose方法嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM