C#列表或数组技术,以节省内存占用

时间:2016-02-25 08:53:55

标签: c# arrays list memory-management arraylist

所以我运行的模拟有3个大约200k对象的列表。每个对象保存有关点(x,y,z)的信息,并包含x个对象的数组。

根据模拟中帧(动画的)数量,每个Point对象都包含64个值的数组。

整个模拟占用大约11千兆字节的RAM。这对我们的很多用户来说太过分了。因此,我想知道在这种情况下是否有智能方法来节省内存使用量。

这些点中至少有60%的数组保持值0.我已经想过将列表用作指针的方法,以便相同的值(例如0)不会在内存中保存几百万次,就像我在C ++中一样。但是我无法在C#中为此实现。

减少模拟占用的11 GB RAM的任何提示或技巧都非常受欢迎!

如上所述的Point对象是:

public class Vertex { 
    public Point3D position; 
    public float[] delta; 
}

还有3个网格。那些把对象放在:

public List<Vertex> Vertices;

数组填充的方式是另一个点列表,大致与网格对齐,但不完全与每个顶点对齐,这些点的位置每帧都会改变,所以每个帧,每个点必须分配一小部分它对每个附近顶点的值。因此填充顶点并不像看起来那么直接。

我目前通过初始化大小为例如1的数组来解决这个问题。 64.然后根据是否存在任何关闭点,将值(或多个平均值)分配给该阵列中当前帧的位置。 使用@kookiz的方法可能是可能的,但会比表面看起来更难。

0 个答案:

没有答案