数组属性是否会导致堆上的内存分配?

时间:2016-03-03 16:23:14

标签: c# arrays properties garbage-collection heap

请考虑以下事项:

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问题,我想确保缓存一些像这样的值的想法实际上会产生影响

1 个答案:

答案 0 :(得分:1)

数组总是引用类型,所以是的,它是"基本上返回指针"。

如果您尝试调试内存问题,我建议使用内存分析器。有一个built in to Visual Studio或者您可以使用第三方(我个人喜欢DotMemory,它有5天免费试用)。使用分析器将帮助您识别正在创建内存对象的内容以及保持内存对象存活的内容。