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