沧州网站制作教程,wordpress3.1.3漏洞,网站建设合同黑客攻击,wordpress 文章 html代码
控制频繁调用GC
控制高频率的内存分配。控制大块的内存申请#xff0c;可能会造成内存的碎片化#xff0c;如果需要申请#xff0c;尽可能在刚启动时申请。控制容易导致 GC alloc的函数调用[Mono]控制字符串拼接/ToString/ToArray[Mono]Boxing(拆装箱操作)/委托/匿名…代码
控制频繁调用GC
控制高频率的内存分配。控制大块的内存申请可能会造成内存的碎片化如果需要申请尽可能在刚启动时申请。控制容易导致 GC alloc的函数调用[Mono]控制字符串拼接/ToString/ToArray[Mono]Boxing(拆装箱操作)/委托/匿名函数[Mono]Tag/Name/Mesh.Vertices[Lua]Vector等非基础类型的参数传递
脚本注意事项
避免Update LateUpdate等函数频繁的gc alloc避免在Update()内GetComponent()避免在Update()内FindObjectsOfType()避免在Update()里赋值给栈上的数组会触发堆内存的反复分配避免在Update()内使用GameObject.Tag和GameObject.Name用CompareTag来进行比较避免频繁调用alloc-accessors(如Mesh.vertices/normals/uvs、SkinedMeshRenderer.bones)如果一定需要也尽量缓存起来避免频繁调用int.tostring()及其它类型的衍生避免OnGUI的调用频繁创建和更新的字符串尽量缓存比如CD时间等尽量避免dict.Values操作直接遍历取Value即可用RayCastNoAlloc替换RayCastAll/用yield return null代替yield return 0尽量少用lambda,创建带upvalue的lambda对象会产生124B的GC禁止在Update或for循环中使用委托有务必要有-另外禁止有太长的委托调用链禁止通过new的方式实例化MonoBehavior的派生类否则无法得到引擎的有效管理禁止在Update/FixedUpdate/LateUpdate/OnGUI等频繁调用的逻辑中使用携程尽量少用Resources.Load加载资源禁止使用Invoke(func,1)来实现延时调用尽可能避免使用携程。Unity的协程是使用迭代器实现的会分配堆内存使用网格导航时尽可能避免使用Obstacle模拟动态障碍物否则对CPU的冲击比较大如有此类需求建议使用碰撞体替代禁止在MonoBehavior的派生类中存在被引擎高频调用的空方法如Update里面没有方法内容就应该删掉禁止在MonoBehavior的派生类中存在Awake/Start/OnEnable/OnDestroy等空方法必须使用CompareTag接口比较GameObject的Tag。看到Unity源码在使用CompareTag对比Tag时是对比int类型。尽可能减少UnityEngine.Onject null 比较尽量避免使用Relection(反射)尽量避免使用可变参数(param object[] args),避免装箱拆箱操作il2cpp中会重载多个方法导致生成的文件过大禁止没有计算需求的变量赋值或者计算简单条件判断尽量使用三目运算符b?x:y注意List等容器常用接口的复杂度尽量从尾部移除/批量移除RemoveRange等在频繁查询数据列表时建议使用HashSet/HashTable 查找时间复杂度低的数据结构避免使用List使用可变长容器时建议根据预估容器进行初始化循环中寻找到适合条件的后应该适时地使用break跳出循环尽可能将一些内存占用低但为数众多/功能简单的小对象定义为Struct结构体而非Class尽可能减少函数调用栈。如使用x (x0?x:-x)代替x Mathf.Abs(x)Unity避免使用SetActive
开销问题 C#层到Native层的调用速度比C#层慢会导致Canvas抛弃其VBO顶点缓存对象数据。重启Canvas会使Vanvas包含所有的子Canvas强制进行rebuild和rebatch进程。如果比较频繁增加CPU的使用会造成帧率卡顿UI元素的网格定点数改变会造成堆内存分配触发GC导致耗时不过对UI元素进行位置移动不会造成堆内存分配
优化 C#层设置标识判断是否隐藏将要频繁变化的UI元素与不频繁变动的UI元素分开动静分离通过将UI元素的坐标移动到Canvas的范围之外的方法来显示与隐藏避免SetActive的耗时以及SendWillRenderCanvases的耗时。要更改单个UI的显隐可以通过GetComponentCanvasRenderer().SetAlpha(0);来实现并且勾上CanvasRender.cullTransparentMesh使其不渲染网格但是这样做还是会触发update等函数并且会触发点击事件要更改父物体的显隐可以通过添加CanvasGroup组件设置透明度的方式来进行显示与隐藏。
UI优化
制作图集动静分离子Canvas(但是会导致Canvas在子Canvas在子Canvas那边打断Batch最好是不要使用多个Canvas)相同图集和材质的放在一起减少DrawCall对Canvas下的所有CanvasRenderer深度优先遍历生成一个队列如果在里面镶嵌Canvas为空时不受影响如果有任意元素会打断Batch计算Depth 每个Instrunction和前面的Instrunction判断是否相交主要是判断相交同时 材质/贴图信息不一样的Instruction如果有depth1两个CanvasRenderer相交同时材质/贴图不同就要保序相交是指网格相交不是RectTransform相交Text是OverflowDepth -Material ID-Texture ID 渲染顺序Depth表示这个元素能在第几步绘制不能设置图集的 要设置成2的幂次方减少Mask的使用如果需要可以优先考虑使用Rect Mask 2D绘制完Mask所有节点之后 需要把Stencil复原增加了一次DrawCall降低层级减少深度遍历生成的消耗非必要 关闭 MipMap Read/Write纹理格式推荐使用ASTC和ETC2 ETC2对应的纹理分辨率为4的倍数在对应的纹理开启MipMap时更具有严格的要求其分辨率为2的幂次方。否则该纹理将被解析成未压缩格式使用不同材质的实例化物体instance将会导致批处理失败。在不移动不缩放的物体可以使用静态批处理使用静态批处理不要再移动不然开销的内存很大禁止非图集贴图资源不合理的留白会影响UGUI运行时自动和批禁止使用修改Alpha值的方式来隐藏界面尽可能降低图集留白提高贴图利用率尽可能将图集中大的图片改为地图加载建议同一Canvas中使用到的图集数量控制在三个以内Canvas下的UI节点过多导致算法贪心策略耗时过长。主要消耗在Rebatch和Rebuild如果节点都是动态切不怎么变动问题不大Rebatch之后结果会进行缓存复用知道下一次节点变化如果节点经常变动会引起Canvas的Rebeach和RebuildCPU耗时就会响应增加。在使用Layout时,不要去嵌套多的物体,这样在修改相关的一个Item时,所有的物体都会遍历,造成了大量的大量的计算浪费.在使用完Layout排序之后禁用掉。 资源规范
音频
如果在音效不损失的情况下可减少音频的Quality如果不需要的双声道可以关掉开启Force To Mono较长的音乐要设置成Streaming不然整个资源会一次性加入内存中 Decompress On Load音频文件以压缩形式存放在磁盘中解压后直接放在磁盘中适合小音频。Streaming音频放在磁盘中加载时循环一下操作“从磁盘中读取一部分解压到内存中播放卸载”存在占用较小但是CPU消耗比较大Compressed In Memory 音频文件已压缩形式放在内存中加载时直接解压到内存中。CPU开销更大加载速度和内存上更占优势不适合大音频。
模型
重复的FBX的模型文件可以把重复的网格丢弃。不然会重新加载到内存中控制骨骼的数量和复杂程度Optimize Game Objects 勾选上只有mesh不会在出现骨骼依然可以播放动画如果是需要单独一个骨骼控制可以在控制面版上 单独排除一个骨骼 Scene
搭建在Scene中的资源。不会被释放除非切换场景。要尽可能把场景中的资源少放
Prefab
每一个Prefab不要过大如果过大尽可能去拆分可以避免大内存的开销同一个Prefab尽可能使用一张图集如果要使用多张图集/图片控制在3个图集以内
小心插件
可能插件有多个版本的Json 造成的资源的浪费
AssetBundle
如果开发版本不会发生变化可以去除掉TypeTree,这个是版本开发兼容性大小尽量控制在1~2M最大不要超过10M
IO
必须是异步的 不然会造成卡顿