如何统一存储和处理大型数组

问题描述 投票:0回答:1

在我的统一项目中,我有一个非常大的整数数组。它包含大约 65,000 个数组,每个数组的长度为 4。当我尝试在程序中使用它时,它崩溃并且 Unity 关闭。

我希望能够快速获取数组中的第n个数组,并且不需要能够对其进行编辑或任何操作。存储和处理数据的最佳方式是什么?

c# arrays unity-game-engine large-data data-storage
1个回答
0
投票

您可能应该使用值类型的数组,也许类似

public readonly struct Vector4i{
    public int X {get; init;} 
    public int Y {get; init;} 
    public int Z {get; init;} 
    public int W {get; init;} 
}

数组是对象,而对象是有开销的。每个数组需要 16 字节的额外内存,+ 8 字节用于引用(在 x64 上)。因此,与结构体相比,所需的内存几乎增加了一倍。您还会使 GC 的生活变得更加困难,因为它需要遵循大量参考资料。

对固定大小的数据使用值类型可以消除所有这些开销,为您提供约 1Mb 内存的单个内存块。

请注意,可以使用

Span<T>
这提供了对某些数据序列的抽象。您应该能够将数组转换为
ReadOnlySpan<int>
,然后将其切片为单个向量。这些转换基本上是免费的。

© www.soinside.com 2019 - 2024. All rights reserved.