我有一个问题,几个 3 维数组分配了大量内存,程序有时需要用更大/更小的数组替换它们并抛出 OutOfMemoryException。
示例:分配了 5 个 96MB 数组(200x200x200,每个条目 12 个字节的数据),程序需要将它们替换为 210x210x210(111MB)。它以类似于以下方式执行此操作:
array1 = new Vector3[210,210,210];
其中 array1-array5 与之前使用的字段相同。这应该将旧数组设置为垃圾收集的候选对象,但似乎 GC 动作不够快,并在分配新数组之前留下分配的旧数组 - 这会导致 OOM - 而如果它们在新分配之前被释放,则空间应该是足够。
我正在寻找的是一种方法来做这样的事情:
GC.Collect(array1) // this would set the reference to null and free the memory
array1 = new Vector3[210,210,210];
我不确定完整的垃圾收集是否是一个好主意,因为该代码可能(在某些情况下)需要相当频繁地执行。
有没有正确的方法来做到这一点?