首页 > 系统相关 >unity内存优化总结

unity内存优化总结

时间:2023-06-07 12:33:26浏览次数:49  
标签:profiler unity 实例 内存 模块 memory 优化

前言

  一般Unity项目的内存主要分为如下方面:
    资源内存
    mono内存
    dll内存
    lua内存

资源内存的分析与优化

合理的资源标准

  资源标准因项目而异

1.如何定制合理的资源标准

    1)根据项目定位受众的目标设备的性能峰值(比如内存不要超过2G),自上而下的进行规划。
    2)若是目标机型的性能越有限,那么项目的资源划分应该更有侧重点,比如项目主要时卖皮肤,又想同屏很多玩家,那么可以在不太影响体验的前提下,挪出其他资源的内存到角色的外观上。

mono内存的分析与优化

  某个时刻内存占用分析

    内存占比合理性

  前后时刻内存对比分析

    内存分配合理性

      方法一:利用memory profiler的compare snapshots功能


        1)分别对测试过程的不同时刻进行采样。
        2)Single Snapshot中选中的第一个项作为A,切入compare snapshots后选中选择的项作为B,选择完后就会自动生成对比结果。也可以通过调换按钮来让AB对调。
        3)可按顺序对diff、type进行group操作,然后在对size排序,可以更看到新增和删除的有多少内存,分别有哪些,大头是什么。

        4)

    泄露分析

      如何才算泄漏

        1)一段时间,持续分配,不会消减的对象。
        2)

      组件实例泄露

        组件实例泄露是指:gameObject已调用的Destory,但是memory profiler能捕抓到无名的组件实例对象。(2021版本的memory profiler会右侧的status标记出可能是leaked对象。)
        1)可以通过泄露对象的属性辅助定位从属于哪个模块,把分析的范围缩小到该模块的代码。(比如下面的ui.text泄露,从text字段可知是任务相关模块)

    碎片分析

      fragmented内存是如何产生的?

        1)A模块申请了非常大的a内存,使用完后释放,B模块申请非常小的b内存,位置在之前的a内存内,此时A模块再想申请跟a内存一样大的内存时,由于b内存穿插在之前的a内存内,系统只能另外找一块新的内存分配给A模块,因此a内存内很多空闲空间就未被利用起来了。

      如何知道一块fragmented内存是来源?

        1)若是正在使用中的地址,在Objects and Allocations中显示Address并对它进行match定位,它的详情。
          下面的案例搜到是unity sbp持有的BundleDetails中的ab数据。


lua内存的分析与优化

    lua闭包引用了C# 组件实例

      table在GetText的时候,将text的实例push包装成userdata缓存到ObjectTranslator的对象池中。

dll内存占用优化

可以通过在memory profiler里Select Table View-> Raw Data -> Managed Type来赋值筛选使用的类。

标签:profiler,unity,实例,内存,模块,memory,优化
From: https://www.cnblogs.com/lanyelinxiang/p/17174497.html

相关文章

  • 慢 SQL 优化之索引的作用是什么? | 京东云技术团队
    前言本文针对MySQL数据库的InnoDB存储引擎,介绍其中索引的实现以及索引在慢SQL优化中的作用。本文主要讨论不同场景下索引生效与失效的原因。慢SQL与索引的关系慢SQL优化原则数据库也是应用,MySQL作为一种磁盘数据库,属于典型的IO密集型应用,并且随机IO比顺序IO更昂贵。真......
  • linux优化
    第18章Linux操作系统优化目录第18章Linux操作系统优化1.更改Yum源和添加epel源2.关闭SELinux3.关闭防火墙(Firewalld)4.关闭NetworkManager5.同步系统时间6.加大文件描述7.别名及环境变量优化8.内核优化9.配置SSH远程管理服务10.修改主机名和IP脚本11.安装常用软件12.......
  • Wwise内存问题
    1)Wwise内存问题​2)安卓平台特效显示不一致的问题3)多个矩形小方块组成的地形接缝处有黑线问题这是第339篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。UWA社区主页:community.uwa4d.comUWAQQ群:465082844Wwis......
  • H.265流媒体视频播放器EasyPlayer在ios设备上播放出现画面拉伸情况的优化
    EasyPlayer流媒体视频播放器可支持H.264与H.265,性能稳定、播放流畅,能支持RTSP、RTMP、HLS、FLV、WebRTC等格式的视频流播放,并且已实现网页端实时录像、在iOS上实现低延时直播等功能。在EasyPlayer的使用过程中,有用户反馈,在ios设备中播放视频出现了画面被强制拉伸并且无法调整至......
  • Unity UI Toolkit/UI Element两栏布局的实现
    今天遇到一个需求,用UIToolkit复刻Web端的页面,结果发现USS根本木的float属性,直接犯难了。最后通过使用绝对定位来做到两栏布局,好在页面并不复杂,否则设置起来恐怕非常麻烦。(话说如果我全用绝对定位,是不是等于在用UGUI?)实现如上,一个绝对定位解决,实际上在CSS中三栏布局也会用到绝对......
  • EasyCVR平台手机端H5页面系统名称过长导致显示异常的情况优化
    EasyCVR视频融合平台基于云边端协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、宇视SDK等。在测试中发现,EasyCVR平台手机端H5页面下,系统名......
  • EasyCVR视频融合平台国标GB设备语音喊话流程优化
    EasyCVR视频融合平台基于云边端一体化架构,可支持多协议、多类型设备接入,在视频能力上,平台可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、智能分析以及平台级联等。其中,语音对讲功能可以实现对监控现场的语音喊话、双向对讲,只要前端设备带语音功......
  • JMM(java内存模型)
    一、概念JMM与java并发编程相关:1、抽象了线程与主内存的关系,例如线程的共享变量需要放到内存中进行读取2、规定了java源代码到CPU可执行指令这个转换过程中需要遵守的规范,例如防止指令重排序造成的并发问题 二、并发编程的三个特性1、原子性一次操作或者多次操作,要么所有......
  • 指针与内存管理
    参考文章:《现代C++:一文读懂智能指针》https://zhuanlan.zhihu.com/p/150555165《当我们谈论shared_ptr的线程安全性时,我们在谈论什么》https://zhuanlan.zhihu.com/p/416289479指针指针是C++中一种内置变量类型,存放内存地址//局部变量,存储空间静态分配inta;int*p=&......
  • 【动态规划】【拉格朗日插值优化dp】集训队互测2012 calc
    【动态规划】【拉格朗日插值优化dp】集训队互测2012calc题目描述一个序列\(a_1,a_2,\dots,a_n\)是合法的,当且仅当:\(a_1,a_2,\dots,a_n\)都是\([1,k]\)中的整数。\(a_1,a_2,\dots,a_n\)互不相等。一个序列的值定义为它里面所有数的乘积,即\(a_1\timesa_2\times\dots......