当前位置: 首页 > news >正文

Unity垃圾回收(GC)

1.GC的作用:定期释放不再使用的内存空间。

注:C++不支持GC,需要手动管理内存,使用new()申请内存空间,使用完后通过delete()释放掉,但可能出现忘记释放或者指针丢失的情况。

2.Unity中GC流程

        1)检查内存中所有的对象

        2)检查每个对象是否被其他对象引用

        3)GC会将没有被引用的对象标记为可释放

        4)释放所有被标记对象

3.Unity GC触发条件

        1)周期性触发,平台不同周期时间不同

        2)使用new()分配空间,但是内存空间满了

        3)手动使用System.GC.Collect(),并非立刻执行

4.GC执行的问题

        1)每次执行GC,都会暂停Unity主线程,因此游戏画面会停止渲染,造成卡顿与掉帧

        2)执行GC若内存仍然不足,会申请更大内存空间,造成更长时间卡顿

        3)Unity的GC采取不压缩(内存块不会从离散变连续)的机制,可能导致内存碎片化

5.避免GC导致性能问题的解决方案

        1)谨慎使用new(),并且避免在Update等周期函数中使用,array,class等分配在堆上

        2)使用struct代替class,因为struct分配在栈上

        3)多使用对象池与Cache(缓存)

6.造成GC的C#语法

        1)可以使用StringBuilder代替string

        2)yield与async(异步)

        3)装箱(变量转化为object类型)与拆箱(变量转为基本类型),可以使用.ToString()使得代码编译减少装箱操作,从而减少堆上内存分配。

        4)闭包

http://www.dtcms.com/a/175849.html

相关文章:

  • Spring Boot 中 AOP 的自动装配原理
  • 如何使用极狐GitLab 软件包仓库功能托管 npm?
  • 战术级微波干扰系统:成都鼎轻量化装备如何实现全频段智能压制?
  • http Status 400 - Bbad request 网站网页经常报 HTTP 400 错误,清缓存后就好了的原因
  • Java程序题案例分析
  • Nvidia-smi 运行失败(Failed to initialize NVML: Driver/library version mismatch)
  • 2025FIC初赛(手机)
  • 【实战教程】零基础搭建DeepSeek大模型聊天系统 - Spring Boot+React完整开发指南
  • 阿里云平台与STM32的物联网设计
  • 大模型Prompt工程2.0:多Prompt协同完全指南——从原理到实战,高效解锁AI深层潜力
  • 什么是回调 钩子 Hook机制 钩子函数 异步编程
  • shell脚本实现远程重启多个服务器
  • 代码随想录算法训练营第三十四天
  • 数据库补充知识
  • 【Redis】哨兵机制和集群
  • k8s 中 deployment 管理的多个 pod 构成集群吗
  • 技术视界|青龙机器人训练地形详解(二):添加地形到训练环境
  • Flutter TabBar / TabBarView 详解
  • 办公学习 效率提升 超级PDF处理软件 转换批量 本地处理
  • 重新定义高性能:Hyperlane —— Rust生态中的极速HTTP服务器
  • QMK键盘固件配置详解
  • Azure OpenAI 聊天功能全解析:Java 开发者指南
  • uniapp 震动功能实现
  • AKS 网络深入探究:Kubenet、Azure-CNI 和 Azure-CNI(overlay)
  • 2025年渗透测试面试题总结-网络安全、Web安全、渗透测试笔试总结(一)(附回答)(题目+回答)
  • 【卡特兰数】不同的二叉搜索树
  • Spring 如何解决循环依赖问题?
  • 大模型时代的数据治理与数据资产管理研究方向
  • nginx之proxy_redirect应用
  • 数据结构之栈与队列