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

本文关键字:内存 分配 属性 是否 数组 | 更新日期: 2023-09-27 18:37:10

请考虑以下事项:

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 问题,我想确保我缓存一些类似值的想法实际上会有所作为

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

数组

始终是引用类型,所以是的,它"基本上返回一个指针"。

如果您正在尝试调试内存问题,我建议您使用内存性能分析器。Visual Studio中内置了一个,或者您可以使用第三方(我个人喜欢DotMemory,它有5天的免费试用期)。使用探查器将帮助您确定创建内存对象的内容以及使内存对象保持活动状态的内容。