gpt4 book ai didi

c# - 调整数组大小会调用 GC 吗?

转载 作者:太空狗 更新时间:2023-10-29 17:38:32 27 4
gpt4 key购买 nike

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

如果新数组比之前的数组小,但多余的对象已经放回通用对象池中,是否会调用 GC?

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

感谢帮助

最佳答案

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

来自docs :

This method allocates a new array with the specified size, copies elements from the old array to the new one, and then replaces the old array with the new one.

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

关于c# - 调整数组大小会调用 GC 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3629641/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com