Untiy文档总结(1)-Profiling
这段时间上班了,不是什么大公司,虽说很闲但是不能断了学习,就开始看优化有关的文档,虽说自己英语渣的要死,但也要读下去,逼着自己翻译完了,里面有抄Unity圣典的,但自己是看Unity5.5文档写的,只是给你看的,也许哪天小伙伴会看见吧,凑活着看吧,有总比没有强.
unity优化的部分
CPU:蒙皮、批处理、物理模拟、用户的脚本、例子系统等等。
GPU:着色器、DrawCall,图片。
内存优化
一共有两部分内存,一部分是Mono内存,一部分是unity内存。
Mono内存
Mono内存为Unity对象(游戏对象,资源,组件等等)控制脚本对象和封装器。当资源分配和可用内存不相配或者在调用 System.GC.Collect()时,清理器就会清理空间。
内存被分配在堆块中。如果要分配的资源和已分配块不相符时,就会分配更多的内存。堆块将会保留在Mono里,直到app关闭。也就是说,Mono不会释放任何OS使用的内存(Unity 3.x)。一旦你分配了一定数量的内存,它就会被mono保留,并对于OS来说不再是可用的。即使当你释放它,它也仅仅变为是对Mono可用的,而不是对于OS可用。分析器中的堆内存值仅会增加,而永远不会减少。
使用System.GC.GetTotalMemory()来得到已使用的所有Mono内存。
Unity内存
Unity内存控制资源数据(贴图,网格,音频,动画等等),游戏对象,引擎内部(渲染,粒子系统,物理等等)。使用Profiler.usedHeapSize()来得到已使用的所有Unity内存的数量。
内存映射
目前没有任何工具但是你可以使用下列方法。
·unity分析器-不完美,跳过了一些东西,但是你可以得到一个概览。
·内置分析器-
·显示已使用的堆和已分配的堆
·显示每一帧Mono资源分配的情况
·可以制作自己的工具根据这些API:
● FindObjectsOfTypeAll (type : Type) : Object[]//返回所有给定的类型的对象
● FindObjectsOfType (type : Type): Object[] //返回指定类型的所有处于激活状态的对象
● GetRuntimeMemorySize (o : Object) : int //返回运行时资源所占的内存的大小
● GetMonoHeapSize //返回Mono对内存的大小
● GetMonoUsedSize //返回Mono使用的内存大小
● Profiler.BeginSample/EndSample - profile your own code //分析自己的代码
○ UnloadUnusedAssets () : AsyncOperation //卸载没有使用的资源--异步操作
● System.GC.GetTotalMemory/Profiler.usedHeapSize
对已加载对象的引用——没有方法可以得到它。一个变通的方案是找到场景为公有变量在场景中找到引用。
垃圾回收器(Garbage Collector)
·当系统无法把新数据分配到已分配的堆块中,就会开始工作。
·不要在移动设备上使用OnGUI()。
·每一帧会被绘制多次
·完全重绘视图
·创建大量的内存分配调用,并需要垃圾回收器来清理
过快地创建/移除过多的对象?
·这可能会导致碎片。
·使用编辑器分析器来跟踪内存活动。
·内置分析器可以被用于跟踪mono内存活动。
·当它可以有一个间隔时,你可以使用System.GC.Collect() 这个.Net函数。
分配小技巧
·预先分配一个列表,可以重复使用物体,例如自己创建一个内存管理。
·不要在每一帧分配大量的人内存,使用预先分配和缓存来代替。
·内存碎片问题?
预先分配一个内存池
使用一个列表来存储那些当前不用的,但是会重新使用的游戏对象,来代替重复的销毁创建。
Mono内存溢出
·分析内存的活动-第一张内存页什么时候被填满的。
·你真的需要如此多的一张内存页都不够的游戏对象?
·对于局部数据使用结构体而不是类。类被分配在堆区,结构体被分配到栈区。
·阅读Understanding Automatic Memory Management(https://docs.unity3d.com/Manual/UnderstandingAutomaticMemoryManagement.html)页面。
内存不足崩溃
在某些是时候,游戏会因为“内存溢出”而崩溃,尽管在理论上是合乎情理的。当这种情况发生时,对比正常游戏的内存足迹和已分配的内存大小。如果两个值不相似,说明这发生了一个内存峰值。这可能是由于:
·同一时间加载了两个比较大的场景 --解决方法是在两个场景之间使用一个空场景。
·附加的场景加载--移除不用的部分来维持内存的大小
·巨大的资源包被加载到内存
·纹理没有被适当压缩(对移动设备是无用的)
·纹理被启用了获取/设置像素贴图,这钟操作需要在内存中创建一个贴图的未压缩的复制品。
·动态加载JPEG/ PNG实质上是没有被压缩的
·加载时时巨大的mp3文件被标记为未被压缩的
·在怪异的缓存中存在没有使用的资源,像静态MonoBehavior区域,当场景变换时他不会被清理。
Untiy文档总结(1)-Profiling的更多相关文章
- MongoDb 创建、更新以及删除文档常用命令
mongodb由C++写就,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理.关于它的一个最简洁描述为:scalable, high-performance, o ...
- 31 Godoc: documenting Go code 编写良好的文档关于godoc
Godoc: documenting Go code 编写良好的文档关于godoc 31 March 2011 The Go project takes documentation seriousl ...
- Go文档:go命令
目录 go go bug--启动bug报告 go build--编译包及其依赖包 go clean--删除对象文件和缓存文件 go doc--查看包或符号的文档 go env--打印环境变量 go f ...
- 文档翻译第001篇:Process Monitor帮助文档(Part 1)
[译者注] Process Monitor是一款非常著名的系统进程监视软件.总体来说,Process Monitor相当于Filemon+Regmon,其中的Filemon专门用来监视系统中所有文件的 ...
- C#给PDF文档添加文本和图片页眉
页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...
- dotNET跨平台相关文档整理
一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...
- ABP文档 - Javascript Api - AJAX
本节内容: AJAX操作相关问题 ABP的方式 AJAX 返回信息 处理错误 HTTP 状态码 WrapResult和DontWrapResult特性 Asp.net Mvc 控制器 Asp.net ...
- ABP文档 - EntityFramework 集成
文档目录 本节内容: Nuget 包 DbContext 仓储 默认仓储 自定义仓储 特定的仓储基类 自定义仓储示例 仓储最佳实践 ABP可使用任何ORM框架,它已经内置了EntityFrame(以下 ...
- ABP文档 - SignalR 集成
文档目录 本节内容: 简介 安装 服务端 客户端 连接确立 内置功能 通知 在线客户端 帕斯卡 vs 骆峰式 你的SignalR代码 简介 使用Abp.Web.SignalR nuget包,使基于应用 ...
随机推荐
- Hadoop权威指南: 专有数据类型
Writable 和 WritableComparable接口 Writable接口 ** Writable接口的主要目的是,当数据在网络上传输或从硬盘读写时,提供数据的序列化和反序列化机智 ** * ...
- Docker实战--部署简单nodejs应用
如何在Docker的container里运行Node.js程序 主体思路:一个简单的Node.js web app,来构建一个镜像,然后基于这个镜像,运行一个容器,从而实现快速部署. 操作环境: 虚拟 ...
- CentOS 6.4 升级python 2.6.6 到 python 2.7.9
1. 查看当前系统python的版本 python -V 2. 下载python软件包 cd /usr/local/src wget http://python.org/ftp/python/2.7. ...
- 关于post与get请求参数存在特殊字符问题
遇到项目中存在文本编辑框输入特殊字符 比如:# ? & 空格 , 导致后台接受不到参数问题,对可能存在特殊字符的参数进行encodeURIComponent; C#后台接受参数不需要解码 也可 ...
- html5表单和伪类
type = "email"; 自带验证格式type = "url"; 网址 http//:type = "tel";移动端会变成数字键盘t ...
- Android灯光系统--深入理解背光灯
Android灯光系统--深入理解背光灯 一.怎么控制背光灯(简述) APP将亮度值写入数据库 线程检测数据库的值是否发生变化 这种机制成为"内容观察者"--contentObse ...
- 遍历hashMap对效率的影响
测试环境:jdk1.7.0_79\Processor 1.7 GHz Intel Core i5 遍历Map的方式有很多,通常场景下我们需要的是遍历Map中的Key和Value. 写了两个方法: pu ...
- Oracle RAC学习笔记02-RAC维护工具集
Oracle RAC学习笔记02-RAC维护工具集 RAC维护工具集 1.节点层 2.网络层 3.集群层 4.应用层 本文实验环境: 10.2.0.5 Clusterware + RAC 11.2.0 ...
- BZOJ 2142: 礼物
模非素数下的排列组合,简直凶残 调着调着就过了= = 都不知道怎么过的= = 直接上链接http://hi.baidu.com/aekdycoin/blog/item/147620832b567eb4 ...
- 浅谈iOS程序员的成长和进阶
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...