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包,使基于应用 ...
随机推荐
- WinForm 对话框、流
一.对话框 ColorDialog:颜色选择控件 private void button1_Click(object sender, EventArgs e) { //显示颜色选择器 colorDia ...
- Sublime Text3自定义主题
设置背景色和关键字颜色(Color Scheme 生成器): Color Scheme 生成器地址:http://tmtheme-editor.herokuapp.com/ 首先:点击General- ...
- final对于访问效率的影响
在能够通过编译的前提下,无论局部变量声明时带不带final关键字修饰,对其访问的效率都一样. 并且:重复访问一个局部变量比重复访问一个成员或静态变量快:即便将其final修饰符去掉,效果也一样. 例如 ...
- sessionstorage,localstorage和cookie之间的区别以及各自的用法
由于年前辞了自己的工作,年后又开始重新找工作,参加了好几次面试,居然都遇到了同样的面试题:sessionstorage,localstorage和cookie之间的是区别? 当然,在面试的时候答的也不 ...
- javascript的方法
1. decodeURIComponent() decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码. 语法: decodeURI ...
- BZOJ 4085:[Sdoi2015]quality(round 2 音质检测)(数据结构)
居然在考场上把这道题打出来了觉得自己也是有点吊啊(虽然后面就没时间做其他题了囧而且还被卡常数了...) 题解自己写了一份TEX的就直接放上来吧.... 好啦,在谈点什么别的 什么?你在bz上TLE了? ...
- 使用hubuild,mui开发微信app—首页(一)
写在前面 本系列文章我将介绍一下从零开始利用hubuild,mui实现微信app的开发,该系列是个人学习记录,所以在每篇文章中,都是从怎么去实现开始讲解,然后再把实例中涉及知识点做一个概述. 创建一个 ...
- Ajax跨域实现淘宝/百度搜索下拉提示效果
最近学到Ajax,觉得自己对与前后端的数据交互有了一个基本的了解.下面是Ajax应用到淘宝/百度的搜索功能的一个简单的小实例,就是输入一个词,下拉框中自动显示匹配的内容:
- USTC 1119 graph 图的同构
USTC 1119 图的同构的严格定义可以参考离散数学:The simple graphs G1=(V1,E1) and G2=(V2,E2)are isomorphic if there exist ...
- Redis Cluster部署、管理和测试
背景: Redis 3.0之后支持了Cluster,大大增强了Redis水平扩展的能力.Redis Cluster是Redis官方的集群实现方案,在此之前已经有第三方Redis集群解决方案,如Twen ...