C#:GC会收集是否需要内存,还是会给出内存异常?

Jac*_*cko 5 c# garbage-collection memory-management large-object-heap

我的代码中有一个循环,它生成许多byte []数组(每个大约1到2 MB),用数据填充它们,然后丢弃引用.所以,即使参考文献只持有很短的时间,我也可以看到私人工作集的增长.

现在,如果我尝试在循环之后分配一个大型数组(~400 MB),我是否可以获得内存不足异常?或者分配会强制GC收集瞬态数据?

谢谢!

Cod*_*aos 2

生成许多​​ 1-2MB 的数组不是一个好主意。即使您避免内存不足的情况,性能也会受到影响。在大对象堆上分配许多短命对象是当前 GC 不能很好处理的分配模式。

我强烈建议尽可能回收它们。实现一个池,一旦不再需要数组,就可以将它们扔到其中。然后在分配时首先检查是否可以满足池中的请求。这种模式给我的一个程序带来了巨大的性能优势。

我认为内存已满会强制执行 GC,但如果大约在同一时间发生非托管分配,您仍然可能会遇到 OOM。