首页 > 系统相关 >Unity性能优化:什么是内存泄露?

Unity性能优化:什么是内存泄露?

时间:2024-05-21 15:40:57浏览次数:26  
标签:泄漏 Cube Mono Unity 内存 泄露 资源

内存泄漏是优化方面的名词,主要是由于不再使用的资源没有及时清理,来释放内存,造成内存的浪费,造成系统卡顿。   或者说,内存就像花呗,额度就这么多,有借要有还,而且手里有闲钱的时候就记得还,以保证内存的充足,如果占着不用,就会在其他需要使用的时候内存不足,就容易崩溃出现问题。   Unity中的内存泄漏,分为代码泄漏和资源的泄漏。 1.代码中的泄漏,Mono内存泄漏 Unity是基于Mono的C#,作为脚本语言,是基于Garbage Collection机制的内存托管语言,GC并不是万能的,GC能做的是通过一定算法找到垃圾,自动将垃圾占用的内存回收。   引用计数是计算机中的一种内存管理技术,是指将资源的被引用次数保存起来,当被引用次数变为零时就将其释放。使用引用计数可以实现自动资源管理的目的,同时引用计数还可以使使用引用计数回收未使用资源的GC算法。   Unity中的Mono内存的占用,只会增加不会减少,释放的时候,归还给Mono建立的内存池,不会归还给操作系统。 Mono内存泄漏是Unity游戏开发中需要特别重视的部分   2.资源中的泄漏,Native内存泄漏 资源泄漏,顾名思义,是指将资源加载之后占有了内存,但是在资源不用之后,没有将资源卸载导致内存的无谓占用。   代码分配的内存,是通过Mono虚拟机,分配在Mono堆内存上的,内存占用量一般比较小,主要是在处理程序逻辑时候使用。 unity的资源,是通过Unity的C++层,分配在Native堆内存上的。   unity的内存回收是需要主动触发的,主动调用的接口是Resources.UnloadUnusedAssets()   内存快照比较是寻找内存泄漏的常用手段,将两次内存的状态截取出来,进行比较,可以清楚地发现内存的变化,寻找内存的增量与泄漏点。一般新增的内存分配,可以视为泄漏。   Mono内存的放大镜——Cube Cube是 腾讯游戏下的腾讯WeTest平台上针对Unity项目的性能指标收集工具,通过Cube可以较方便地获取到游戏的各项性能指标,为性能优化提供了方向。同时Cube也是游戏性能一个很好的衡量工具。   注:平时开发过程防微杜渐,内存泄漏是完全可以避免的 1.架构上,多添加析构的abstract接口,注意清理自己产生的垃圾 2.严格控制static的使用,非必要的地方禁止使用static 3.强化声明周期的概念,无论是代码对象还是资源,都有它存在的生命周期,生命周期结束后就要被释放。                                                          

标签:泄漏,Cube,Mono,Unity,内存,泄露,资源
From: https://www.cnblogs.com/weigangblog/p/18204194

相关文章

  • Unity制作一个定时器Timer
    Timer和TimerManager代码usingSystem.Collections;usingUnityEngine;publicclassTimer:MonoBehaviour{publicdelegatevoidNotifier();publicNotifieronTimer;publicNotifieronTimerReset;publicNotifieronTimerComplete;publicfl......
  • Unity制作一个BroadcastUI 跑马灯文字广播
     usingDG.Tweening;usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;usingUtils;//挂在UI上面publicclassBroadcastUI:MonoBehaviour{privateboolinited=false;privateBroadcastManbm;......
  • Unity查找物体和组件的方法
    一、找物体:①GameObject:a).Find(stringname)通过物体的名字查找b).FindWithTag(stringtag);通过标签获取添加该标签的一个物体c).FindObjectOfType();依据组件类型d).FindGameObjectsWithTag(stringtag)通过标签获取所有添加该标签的物体数组返回一个组合 ②Transform......
  • Unity的UnityEngine.EventSystems中的接口
    一、IPointerDownHandler,IPointerUpHandler,IPointerClickHandler,IPointerEnterHandler,IPointerExitHandlerpublicvoidOnPointerClick(PointerEventDataeventData){Debug.Log("OnPointerClick,鼠标点击,在点击之后抬起时响应");}publicvoidOnP......
  • Unity编辑器Scene窗口快捷操作
    1.按住crtl,可以一个一个单位移动、缩放、旋转物体,单位距离在Edit-Snapsetting中设置,设置单位大小2.选中物体,按住alt+鼠标左键,可以环视目标物体3.按住V键,可以将物体的顶点接到其他物体的顶点 如果要设置更改其他在Scene窗口中的操作,可以利用MonoBehaviour下的OnDrawGizmos或......
  • Unity控制台console打印富文本
    可以用来控制Debug打印文本的 加粗斜体大小颜色Debug.Log("HelloWorld".AddBoldTag().AddColorTag("red"));publicstaticclassStringTagExt{publicstaticstringAddBoldTag(thisstringtext){returntext.AddTag("b");}......
  • Unity物体之间碰撞检测的方法
    检测碰撞有两种方式,一种是利用碰撞器,另外一种就是触发器。碰撞器的种类:1.StaticCollider静态碰撞器指的是相互碰撞的两个物体没有附加刚体而只附加了Collider的游戏对象。这类对象在碰撞时会保持静止,发生碰撞时不会触发任何的方法函数。 2.RigidbodyCollider刚体碰撞器......
  • Unity WebGL的一些配置
    添加自定义值方法:在网页模板中,添加<title>公司名字|{{{PROJECT_NAME}}}</title>///读取PlayerSettings.GetTemplateCustomValue("PROJECT_NAME");///设置PlayerSettings.SetTemplateCustomValue("PROJECT_NAME","这是一个自定义值");修改WebGL模板说......
  • 一次redis和内存的qps比较
    不同缓存策略下的性能指标:无缓存|Redis|直接内存1.无缓存测试结果2.加入Redis缓存后性能翻倍6-73.直接用内存(错误写法)错误写法的性能指标正确写法(双检单例模式)正确写法后,性能......
  • c++菱形继承、多态与类内存模型
    目录1.菱形继承1.1.菱形继承的问题1.2.解决办法2.虚函数与多态2.1.普通函数不能实现多态2.2.虚函数(子类重写)+父类指向子类——实现多态2.3.多态原理3.c++内存模型4.参考1.菱形继承先看下面的例子,SheepTuo同时继承了Sheep和Tuo,而他们同时继承Animal类#include<iostream>usin......