这段时间上班了,不是什么大公司,虽说很闲但是不能断了学习,就开始看优化有关的文档,虽说自己英语渣的要死,但也要读下去,逼着自己翻译完了,里面有抄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的更多相关文章

  1. MongoDb 创建、更新以及删除文档常用命令

    mongodb由C++写就,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理.关于它的一个最简洁描述为:scalable, high-performance, o ...

  2. 31 Godoc: documenting Go code 编写良好的文档关于godoc

    Godoc: documenting Go code  编写良好的文档关于godoc 31 March 2011 The Go project takes documentation seriousl ...

  3. Go文档:go命令

    目录 go go bug--启动bug报告 go build--编译包及其依赖包 go clean--删除对象文件和缓存文件 go doc--查看包或符号的文档 go env--打印环境变量 go f ...

  4. 文档翻译第001篇:Process Monitor帮助文档(Part 1)

    [译者注] Process Monitor是一款非常著名的系统进程监视软件.总体来说,Process Monitor相当于Filemon+Regmon,其中的Filemon专门用来监视系统中所有文件的 ...

  5. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

  6. dotNET跨平台相关文档整理

    一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...

  7. ABP文档 - Javascript Api - AJAX

    本节内容: AJAX操作相关问题 ABP的方式 AJAX 返回信息 处理错误 HTTP 状态码 WrapResult和DontWrapResult特性 Asp.net Mvc 控制器 Asp.net ...

  8. ABP文档 - EntityFramework 集成

    文档目录 本节内容: Nuget 包 DbContext 仓储 默认仓储 自定义仓储 特定的仓储基类 自定义仓储示例 仓储最佳实践 ABP可使用任何ORM框架,它已经内置了EntityFrame(以下 ...

  9. ABP文档 - SignalR 集成

    文档目录 本节内容: 简介 安装 服务端 客户端 连接确立 内置功能 通知 在线客户端 帕斯卡 vs 骆峰式 你的SignalR代码 简介 使用Abp.Web.SignalR nuget包,使基于应用 ...

随机推荐

  1. PLSQL语法深入浅出

    一:PLSQL概览:PLSQL 是Oracle公司在SQL基础上进行扩展而成的一种过程语言.PLSQL提供了典型的高级语言特 性,包括封装,例外处理机制,信息隐藏,面向对象等:并把新的编程思想带到了数 ...

  2. cmake的四个命令:add_compile_options、add_definitions、target_compile_definitions、build_command

    cmake的四个命令:add_compile_options.add_definitions.target_compile_definitions.build_command add_compile_ ...

  3. 一个想法(续四):IT技术联盟创业众筹进度公示

    为了将整个创业过程更加的公开公正透明化,特开此篇用于展示众筹进度. 首轮众筹进度如下:(每天24点更新1次)

  4. 【easyui】之treegrid的分页

    easyui官网给的treegrid的分页是相当的复杂,我们来简化一下! 首先treegrid 分页和 datagrid一样需要设置一系列参数! 如下: depTreeGrid=$("#de ...

  5. bootstrap-标签页

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. c#配置文件的简单操作

    // 配置文件 <?xml version="1.0" encoding="utf-8" ?> <configuration> < ...

  7. Java初学练习答案(循环)

    /* 题目如下: 1 (for 循环)*编程找出四位整数abcd 中满足下述关系的数. (ab+cd)(ab+cd)=abcd 2 (循环)*读入一个整数n,输出如下图形 n = 3 * *** ** ...

  8. !important的理解

    !important用于将当前css代码优先级提升为最高,这个优先级比行内样式更高 但是!important在ie6这种垃圾浏览器下会出现小bug .testClass{ color:blue !im ...

  9. 关于C语言中变量类型转换

    今天在工作中遇到一个问题,而在解决问题的过程中,发现一段关于int 型变量(a)和char型(b)变量间类型转换的代码存在问题:一个值为255的int型变量a,强制类型转换并赋值给char型变量b后, ...

  10. axios全攻略

    随着 vuejs 作者尤雨溪发布消息,不再继续维护vue-resource,并推荐大家使用 axios 开始,axios 被越来越多的人所了解.本来想在网上找找详细攻略,突然发现,axios 的官方文 ...