数组大小调整是否会调用GC?

key*_*rdP 9 .net c# arrays xna garbage-collection

我查看了Array.Resize()的实现,并注意到创建并返回了一个新数组.我的目标是在游戏过程中零内存分配,所以我需要避免创建任何新的引用类型.调整数组大小会触发前一个数组上的垃圾收集器吗?我正在创建自己的2D数组缩放器,但它本质上与.NET Resize()方法的功能相同.

如果新数组小于前一个数组,但多余的对象已经放回到通用对象池中,这会调用GC吗?

数组将不断在我的游戏循环中创建,因此我需要尽量使其尽可能高效.我正在尝试创建一个array pool这样的,所以没有必要继续创建它们.但是,如果resize方法做了同样的事情,那么不仅仅实例化一个新数组而不是拥有池是没有意义的.

谢谢您的帮助

Jon*_*eet 13

Array.Resize实际上根本没有改变原始数组 - 任何仍然引用它的人都可以像以前一样使用它.因此,没有可能的优化.坦率地说,这是一个名字很糟糕的方法,IMO :(

来自文档:

此方法分配具有指定大小的新数组,将旧数组中的元素复制到新数组,然后用新数组替换旧数组.

所以不,它不会重复使用原始内存或类似的东西.它只是创建一个不同大小的浅拷贝.