【Unity】各种操作触发 GC 情况

【Unity】各种操作触发 GC 情况

在 Update 中持续执行下列操作,统计每帧触发 GC 的情况,仅首帧触发 GC 的情况不计入。

使用 Linq 处理数据

基本上使用就会分配内存,所以不要用。

利用 Foreach 遍历容器

不会分配内存,可以用,但根据不同的迭代器实现,速度可能不如 For 循环。

将值类型装箱

会触发内存分配,不要使用。

使用 enum 做键的字典

使用 enum 作为键实测并不会触发装箱,查看源代码就会发现,内部已经改为用泛型处理,所以没有内存分配。

修改字符串

字符串是引用类型,修改字符串实质是创建了一个新字符串,接着旧字符串将被回收,所以会触发 GC,常见如修改 UI 文字时出现。

创建委托

只有使用匿名函数的方式创建时不会分配内存。

创建方式 是否分配内存 分配量级
静态函数 1
成员函数 1
局部函数 1
匿名函数 0

调用匿名函数

默认情况没有内存分配,但用到对象成员则分配内存加一,触发闭包再加一,避免这些情况。

在匿名函数内调用其他函数的情况

函数类型 是否分配内存 分配量级
静态函数 0
成员函数 1
成员局部函数 1
非成员局部函数 0

在匿名函数内使用其他变量的情况

变量类型 是否分配内存 分配量级
对象成员变量 1
作用域外变量 2

【Unity】各种操作触发 GC 情况
https://bdffzi-blog.pages.dev/posts/2970632423.html
作者
BDFFZI
发布于
2024年2月4日
许可协议