相关疑难解决方法(0)

强制数组的垃圾收集,C#

我有一个问题,其中一对三维数组分配了大量的内存,程序有时需要用更大/更小的替换它们并抛出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)

我不确定完整的垃圾收集是否是一个好主意,因为该代码可能(在某些情况下)需要经常执行.

有没有正确的方法呢?

c# arrays xna garbage-collection out-of-memory

17
推荐指数
3
解决办法
2万
查看次数

标签 统计

arrays ×1

c# ×1

garbage-collection ×1

out-of-memory ×1

xna ×1