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

    问题:无法移除2个集合中相同元素 方法:移除所包含的其所有元素. 在执行removeAll方法时,会先对集合元素进行比较,如果元素相等才执行移除操作,说到这,相信很多人都已经明白是怎么回事了,因为不相 ...

  2. 抛砖引玉:探讨网站性能优化之Javascript异步懒加载技术

    懒加载技术是现在许多大型网站的都使用的提高网站性能的方式,它的核心思想是当用户想看页面某个区域时,再加载该区域的数据.这在一定程度上减轻了服务器端的压力,也加快了页面的呈现速度. 其实国内很多网站都用 ...

  3. 通过 Chrome 在 Windows 中调试运行在 iphone-safari 上的 页面

    本文重点讨论如何在 Windows 系统中通过chrome 浏览器调试运行在 iPhone Safari 浏览器中的网页.如果你有一台 iMac/MacBook,可忽略该文档.iMac 环境下,直接通 ...

  4. 中国大学MOOC中的后台文件传输

    早期版本的中国大学MOOC一旦被挂起后,应用在完成当前下载任务后无法继续添加新任务,当然也无法将缓存状态写入数据库.这个问题能否顺利解决直接关系到用户体验. 顺便吐槽下,凡是使用了后台文件传输还提示你 ...

  5. 《经久不衰的Spring框架:@ResponseBody 中文乱码》

    问题背景 本文并不是介绍@ResponseBody注解,也不是中文乱码问题的大汇总笔记,这些网上都有很多内容了.这边仅对几年前,一个卡壳了挺久时间的问题的解决过程做一个记录,以警惕自己,达到自醒得目的 ...

  6. 全面理解java异常机制

    在理想状态下,程序会按照我们预想的步骤一步一步的执行,但是即使你是大V,你也不可避免出错,所以java为我们提供了异常机制.本文将会从以下几个方面介绍java中的异常机制: 异常机制的层次结构 异常的 ...

  7. MVC和三层架构

    从最开始写程序到现在,一路上听到架构这个词已经无数次了,在工作和圈子里也不停听到大家在讨论它,但是很多时候发现不少人对这个概念的理解都是很模糊的,无意间在知道上看到一个朋友的回答,感觉很不错,特转帖到 ...

  8. 【前端】:jQuery下

    前言: 接上一篇博客: [前端]:jQuery上 一.jQuery属性操作 ① attr(设置或返回自定义属性值) input.select.textarea框中的内容, 可以通过attr来获取,但是 ...

  9. 【PHP系列】PHP推荐标准之PSR-3,日志记录器接口

    上节聊完了PHP官方的相关代码规范,下面给大家带来了PHP系列的PHP推荐标准的另外两个,PSR-3,PSR-4. 首先,我们先来了解下PSR-3是怎么回事. PHP-FIG发布的第三个推荐规范与前两 ...

  10. 关于c# 基础运算符的应用

    运算符 分为5种 1 算数预算符 +,-,*,/,分别为加减乘除 ++为加1,--为减1, 前++   后++  的区别 int a = 10, b = a++;            Console ...