2016-03-03 28 views
0

考慮以下幾點:數組屬性是否導致堆上的內存分配?

public class FooBar { 
    public int[] SomeNumbers { 
     get { return _someNumbers; } 
     private set; 
    } 

    private int[] _someNumbers; 

    public FooBar() { 
     _someNumbers = new int[2]; 
     _someNumbers[0] = 1; 
     _someNumbers[1] = 2; 
    } 
} 

// in some other method somewhere... 

FooBar foobar = new FooBar(); 
Debug.Log(foobar.SomeNumbers[0]); 

什麼我不知道的,不調用SomeNumbers屬性導致堆分配;基本上它會導致數組的副本被創建,還是隻是一個指針?

我問,因爲我試圖解決由於返回數組功能的一些GC的問題我有,我想確保我的緩存一些這樣的價值觀的理念將真正發揮作用

+0

數組通過引用傳遞/返回,所以是的,你的屬性基本上只是返回一個指針。 –

回答

1

數組始終引用類型,所以是的,它是「基本上返回一個指針」。

如果您嘗試調試內存問題,我建議使用內存分析器。有一個built in to Visual Studio或者你可以使用第三方(我個人喜歡DotMemory,它有5天免費試用)。使用探查器將幫助您確定什麼是創建內存對象,以及如何保持內存對象活着。

+0

謝謝Scott;我要標記這個答案。至於性能分析,這是Unity發現的一個問題,它是剖析器。我知道是什麼導致了GC峯值(我每個幀都會創建數百個新陣列)。我只是想確保我的解決方案不僅僅是過度分配堆的另一種方式。 haha – dmarra

+0

Unity 5現在在其免費版中包含它的分析器(它僅在4版付費版本中),因此找出哪些腳本正在創建陣列也很有用。 –

+0

是的,我知道;我正在使用它。深刻的剖面顯示了尖峯發生的地方;我有一組方法都創建小數組,但數百幀(他們返回數組)。我試圖改變他們所有現在不返回數組,並聰明地使用緩存值 – dmarra

相關問題