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

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.xdnf.cn/news/4359.html

相关文章:

  • 项目模拟实现消息队列第二天
  • Compose Multiplatform iOS 稳定版发布:可用于生产环境,并支持 hotload
  • C++命名空间、内联与捕获
  • linux环境安装docker
  • AI一键替换商品融入场景,5分钟打造专业级商品图
  • 自编码器(Autoencoder)
  • 遥感数据处理、机器学习建模与空间预测的全流程指南——涵盖R语言(随机森林、XGBoost、SVM等)、特征提取、模型优化及生态学案例分析
  • Ubuntu日志文件清空的三种方式
  • 力扣49. 字母异位词分组(哈希表)
  • suna界面实现原理分析(三):Terminal工具调用可视化
  • 强化学习是AI Agent的进化引擎还是技术枷锁呢?
  • ​Spring + Shiro 整合的核心要点及详细实现说明
  • vLLM 推理 Qwen2.5-VL-7B 视频
  • 2025最新vmware-17虚拟机安装教程(保姆级,图文讲解,带安装包)
  • 餐饮加盟店如何通过日事清全流程闭环管理实现进度同步与效率升级?
  • 强化学习策略梯度推导
  • 漏洞检测服务费用受哪些因素制约?费用区间是多少?
  • 蓝肽子序列--字符串+最长子序列的dp
  • 从零开始学java--集合类(2)
  • 职业短线交易系统
  • SAM详解2(初级应用)
  • Python入门(一)
  • 数字人驱动方向最新顶会期刊论文收集整理 | AAAI 2025
  • 系统级编程(一):内存的段页式管理
  • x-cmd install | Tuistash - Logstash 实时监控,告别图形界面,高效便捷!
  • VBA之Excel应用第四章第三节:Range对象内容的复制Copy粘贴Paste
  • 根据蓝牙名称自动匹配对应 UI
  • 逻辑越权--水平垂直越权(WEB漏洞)
  • 什么是原子变量
  • Linux死锁实验分析与总结