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

【C#学习】GC停世界

unity有个很重要的性能优化点是减少堆内存分配以减少GC(垃圾内存回收),为什么?

内容来源GPT,仅记录

堆内存和栈内存见https://blog.csdn.net/m0_73117967/article/details/144795238


1. GC 需要“安全点”

  • 在 .NET/Mono/IL2CPP 里,GC(垃圾回收器)要清理堆内存中的对象。

  • 它必须知道哪些对象还在被引用(活着),哪些已经没人用了(可以释放)。

  • 为了得到一个确定的对象图,GC 会要求所有线程都 暂停在安全点,这样它才能正确扫描引用。

2. 为什么要暂停所有线程?

  • 如果不暂停,程序可能在 GC 扫描时修改引用:

    • 例:GC 正在检查 A 对象是否还在用,另一线程却刚把 A 放进了一个 List。

    • 这样就会出现 “悬空引用”“误释放”,导致崩溃。

  • 所以最简单、最安全的做法就是 停下整个世界(Stop-The-World),让 GC 独占 CPU,确保引用关系稳定。

3. Unity 的特殊性

  • Unity 用的是 Mono/IL2CPP 的托管堆,GC 是 非并行、非增量 的(虽然 Unity 新版本有增量 GC 选项,但限制多)。

  • 这意味着当 GC 运行时,渲染、物理、脚本逻辑都会停下,用户就会看到 帧冻结/卡顿

4. 在游戏里为什么特别明显?

  • 游戏追求稳定帧率,比如 60FPS → 每帧时间预算只有 16.6ms

  • 如果一次 GC 扫描花掉 20ms~50ms,就会直接“跳过”一帧甚至多帧 → 屏幕画面会肉眼可见地卡住。

  • 在 VR/AR(90FPS~120FPS)里预算更紧,GC 停顿更致命,可能造成眩晕。

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

相关文章:

  • 目前哪些企业需要做网站建设的呢兰州电商平台网站建设
  • 济南网站建设(力选聚搜网络)网页制作免费网站制作
  • 手机网站什么意思关于我们网站设计
  • 林壑地板北京网站建设寻求网站建设技术
  • 高通平台sensor驱动中的配置参数
  • 监利网站建设企业网盘方案
  • JavaScript学习笔记(十一):this使用指南
  • 深圳网络公司做网站网站设计心的
  • 用vs2008做网站视频教程保世基官方网站建设
  • 网站突然被降权怎么办wordpress 重装
  • 网站备案幕布可以ps么小程序企业官网
  • 【MySQL✨】MySQL 入门之旅 · 第十二篇:MySQL 数据库设计与规范
  • 备案期间网站怎么关闭wordpress注册插件中文版
  • 网站的建设的含义厦门app网站设计
  • 198种组合算法+优化BiLSTM神经网络+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备!
  • 银川建立网站装修公司做宣传在哪个网站
  • numpy -- 修改数组形式
  • QT绘画系统
  • anker 网站谁做的优化网站的步骤
  • 2.配置DNS服务器过程
  • 外国的网站 ftp做网站运营经理的要求
  • 办网站需流程wordpress 主题制作教程
  • 漫谈《数字图像处理》之图像模式识别的核心方法论
  • 雅虎网站收录入口南京开发
  • 外贸网站推广平台哪个好网站自动加水印
  • 少样本学习论文分享:多模态模型和元学习
  • 电动剃须刀MCU控制方案开发知识分享
  • html5的网站设计与实现是做什么网络优化工程师是干什么的
  • 有什么网站用名字做图片大全记事本做网站素材代码
  • 《机器学习与深度学习》入门