我制作了一個函式來從父游戲物件的所有子游戲物件中獲取“RectTransform”組件。
using UnityEngine;
public class Test_Script : MonoBehaviour
{
public GameObject parent_G;
RectTransform[] child_R;
private void Awake()
{
child_R = Get_ChildRectTransform(parent_G);
}
public RectTransform[] Get_ChildRectTransform(GameObject parent)
{
int sum_Child = parent.transform.childCount;
RectTransform[] temporary_R = new RectTransform[sum_Child];
for (int i = 0; i < sum_Child; i )
temporary_R[i] = parent.transform.GetChild(i).GetComponent<RectTransform>();
return temporary_R;
}
}
我的問題是......函式中的“temporary_R”是否加載到堆疊中?它是在函式之后終止的嗎?否則,當我寫“new”和“array”時,它會被加載到堆中嗎?
uj5u.com熱心網友回復:
temporary_R它是一個參考陣列的區域變數RectTransform。區域變數存盤在堆疊中,并在函式回傳時自動“釋放”。即使我們通常不談論分配/釋放區域變數。
實際的 RectTransforms 存盤在堆上,如果它是值型別/結構,則作為陣列物件的一部分,或者如果它是參考型別/類,則單獨存盤。每當垃圾收集器處理這些物件時,它就會釋放這些物件。
您通常不會擔心這樣的分配。可能sum_Child會相當小,所以記憶體量也應該是有限的。而且由于它只在很短的時間內保持活動狀態,它很可能會在 gen 0/1 中被收集,即廉價的垃圾收集。我還假設它很少運行,例如每幀一次。
您通常只會在分配大物件(即 >~ 87kb)或非常頻繁地分配(例如在緊密回圈中)時擔心記憶體分配。即便如此,使用性能或記憶體分析器檢查分配率、在 GC 中花費的時間等以確定是否存在問題通常是個好主意。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/449494.html
上一篇:如何獲取MediaPlayer(.wav)音樂物件的持續時間?C#
下一篇:DapperORM多級嵌套物件
