--------------------------------------------------------------------------------------------------------
首先是一般使用的情況:
GameObject x = GameObject.Find( "cube" ); x = null;藉由設為null而釋放掉x。
--------------------------------------------------------------------------------------------------------
使用Unity內的WWW方式下載物件時:
WWW wwwObject; wwwObject.Dispose(); wwwObject = null;--------------------------------------------------------------------------------------------------------
使用Resources載入物件時:
Resources.UnloadUnusedAssets ();--------------------------------------------------------------------------------------------------------
使用GC機制時,單純的方式:
GC.Collect();依照現有的所有層代來逐一釋放:
for( int k = 0; k <= GC.MaxGeneration; k++ ) { GC.Collect (k); GC.WaitForPendingFinalizers (); }關於GC.Collect的說明:
https://msdn.microsoft.com/zh-tw/library/y46kxc5e(v=vs.85).aspx
關於GC.WaitForPendingFinalizers的說明:
https://msdn.microsoft.com/zh-tw/library/system.gc.waitforpendingfinalizers(v=vs.110).aspx
有一點在意的地方是,網路上有人說若是GC.Collect()使用頻繁過多,會造成效能過度消耗和程式變得奇怪運作。
--------------------------------------------------------------------------------------------------------
GC機制還有一種使用方式:
public void Dispose() { Dispose(true); GC.SuppressFinalize(this); }關於GC.SuppressFinalize的說明:
https://msdn.microsoft.com/zh-tw/library/ms182269.aspx
當在看說明時,會發現此方式會有正確和不正確的情況,但是看Mircosoft官方的範例會注意到差別只有在不正確為GC.SuppressFinalize(true);,而正確為GC.SuppressFinalize(this);這兩個地方。
--------------------------------------------------------------------------------------------------------
最後是Mircosoft官方對於自動記憶體管理的說明,簡單來講是設定變數為null和使用GC.Collect():
https://msdn.microsoft.com/zh-tw/library/aa691138(v=vs.71).aspx
沒有留言:
張貼留言