所以我运行的模拟有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的方法可能是可能的,但会比表面看起来更难。