首页 > 其他分享 >Unity-GC优化相关笔记

Unity-GC优化相关笔记

时间:2024-01-29 12:13:59浏览次数:19  
标签:释放 笔记 Unity GC 内存 https com

Unity官网GC定义如下

创建对象、字符串或数组时,用于存储它的内存是从称为的中央池分配的。当此项不再使用时,其先前占用的内存可被回收并用于其他目的。在过去,通常由程序员通过适当的函数调用显式地分配和释放这些堆内存块。如今,Unity 的 Mono 引擎等运行时系统会自动为您管理内存。自动内存管理比显式分配/释放的做法需要更少的编码工作,并且大大降低了内存泄漏的可能性(即分配了内存但后续从未释放的情况)

简单来说,GC会在单帧【非增量式】中,遍历堆上对象,清理掉受Unity完整托管的已被标记为无用内存的内容,是一种行为。而优化gc则指的是如何加速这次回收操作,以防止玩家突然在某一帧感觉卡顿。

【这里着重强调托管是因为踩过一个坑,Texture2D是部分托管的类,新建一张Texture2D,并用Sprite.Create挂到一张image2d上,后面如果这个image换了别的Texture 原本的Texture是不会被释放的,这会导致内存泄漏】

GC的时机

  • 定时GC
  • 手动强制GC
  • 内存不够时启动GC获得额外内存

Profiler窗口可以定位是否是GC导致的性能热点

优化方法

首先,栈上内存是直接释放的,不走GC

  • struct中不添加引用类型变量,会导致GC监控该类型的对象,添加开销
  • 减少装箱

减少引用对象的创建与摧毁

  • 对象池管理
  • 减少Update等大量调用函数中,申请内存的逻辑

杂项

  • 字符串操作使用stringbuilder
  • for代替foreach
  • 在合适的时机手动GC

  

参考

https://blog.unity.com/cn/games/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture-from

https://www.cnblogs.com/hearthstone/p/13357925.html

https://www.cnblogs.com/zblade/p/6445578.html

标签:释放,笔记,Unity,GC,内存,https,com
From: https://www.cnblogs.com/donkey9/p/17994156

相关文章

  • TS学习笔记十二:项目配置
      本节介绍ts项目配置相关内容,包括项目配置文件tsconfig.json的说明及编译选项的内容介绍。B站视频https://www.bilibili.com/video/BV1ca4y1C7WB/西瓜视频https://www.ixigua.com/7327847796814709288一、tsconfig.json  tsconfig.json位于ts项目的根目录中,此文......
  • 【学习笔记】线段树
    1.线段树合并P4556雨天的尾巴首先我们可以把链上操作转成树上差分。然后我们对每个节点开一棵权值线段树。朴素的树上差分都是开一个桶然后加和,但是这里开的是线段树。所以就有了线段树合并。在把\(y\)并到\(x\)的过程中,如果\(x\)本身没有一个\(y\)有的节点就可以直......
  • UOJ #33 树上 GCD
    套路地,对每个\(g\in[1,n-1]\)求出有多少对无序对\((u,v)\)满足\(g|f(u,v)\),然后就可以用一个倒序枚举的\(\mathcalO(n\logn)\)的容斥求出答案。考虑点分治,对每个经过分治中心\(c\)的\(u\rightsquigarrow\text{lca}(u,v)\rightsquigarrowv\)只需分两种......
  • 最新Unity DOTS Instancing合批:如何针对单个渲染实体修改材质参数
    最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去的动画时间。但是在做大规模战斗控制的时候,有10000+的小兵在战斗......
  • Unity架构师进阶:红点系统的架构与设计
    面试的时候经常被问道如何来设计一个红点系统,本文将详细地介绍如何设计一个红点系统,有哪些接口,并完整地给出实现。红点系统的需求分析首先我们来分析一下红点系统的设计需求:红点系统严格意义上来说不属于框架,而是游戏逻辑,所以代码不要放到通用的框架里面,并不属于基础服务。它......
  • 算法笔记 pdf下载
    《算法笔记》内容包括:C/C++快速入门、入门模拟、算法初步、数学问题、C++标准模板库(STL)、数据结构专题(二章)、搜索专题、图算法专题、动态规划专题、字符串专题、专题扩展。《算法笔记》印有二维码,用来实时更新、补充内容及发布勘误的。《算法笔记》可作为计算机专业研究生入学考......
  • [转帖]Oracle SQL调优系列之cursor学习笔记
    https://cloud.tencent.com/developer/article/1995387 文章目录-[一、oracle库缓存](https://cloud.tencent.com/developer)-[1.1、库缓存简介](https://cloud.tencent.com/developer)-[1.2、相关概念](https://cloud.tencent.com/developer)......
  • WebAssembly入门笔记[3]:利用Table传递引用
    在《WebAssembly入门笔记[2]》中,我们介绍了如何利用Memory在作为宿主的JavaScript应用和wasm模块之间传递数据,但是Memory面向单纯二进制字节的读写在使用起来还是不太方便,此时我们会更多地用到另一个重要的对象Table。Table利用用来存储一组指定类型的对象,说得准确一点是对象的引......
  • 数学建模入门笔记(3) 插值与拟合
    插值与拟合插值和拟合的区别:拟合不要求过每一个已知点,而插值要求过每一个已知点,因而插值可以看作过每一个点的拟合。插值适用于补全缺失值,因为使用一般拟合就有可能使已知值偏移,不符合需求。据说PS用某种样条插值,放大的时候最大程度的保留连续性,因此显得不是那么模糊.数学建模......
  • Rust学习笔记
    迭代器迭代器是一个值,它可以生成一系列值Iterrator类型和IntoIterator类型迭代器是实现了Iterator类型的任意值IntoIterator是迭代器本身类型,Item是它生成的值的类型。任意实现了IntoIterator的类型都可以成为可迭代者,可以通过into_iter获得一个迭代器迭代器能生成值迭......