U3D内存优化原则

这几天对项目的优化的过程进行整理:
1. Update中不能频繁的new新的对象
2. 频繁创建的对象需要使用缓存
3. 尽量少的使用Debug.Log
4. 代码中尽量少的使用高级特性,比如foreach尽量使用for或者使用Enumerator去访问,不使用Linq语句等
5. string.format、泛型的使用要注意,在Update中使用的时候可能造成频繁的GC,如使用Compare(TValue,TValue),val = Dictionary.this[Tkey]
6. 当使用未知的函数时,或使用插件时,尽可能的了解内部实现或测试插件本身的效率。如:WaveMesh插件Update函数的实现

void Update(){

        //...............省略...................
        Vector3[] verts = meshFilter.mesh.vertices;
        //...............省略...................
    }

mesh.vertices:返回一个顶点位置的数组值,或者为一组新的顶点位置数组赋值(http://www.ceeger.com/Script/Mesh/Mesh.vertices.html 这种解释有误),英文解释:Returns a copy of the vertex positions or assigns a new vertex positions array.(http://docs.unity3d.com/ScriptReference/Mesh.html),拷贝或重新分配顶点数组,因此还是得看英文文档啊。。。
在Unity的profiler中显示该句话每帧消耗的内存为1k ~ 2k,非常的浪费啊。。。
官方的示例:

“`
var newVertices : Vector3[];
var newUV : Vector2[];
var newTriangles : int[];

function Update () {
var mesh : Mesh = GetComponent.().mesh;

mesh.Clear();
// Do some calculations...
mesh.vertices = newVertices;
mesh.uv = newUV;
mesh.triangles = newTriangles;

}

`解决方法是 缓存 vertices,在Start中使用verts = meshFilter.mesh.vertices;已经在项目中测试过可行。
这示例代码也是非常的坑的,所以使用的时候要注意

优化内存是从一点一滴开始的,不要以为一点内存的开销没什么, 当很多开销加起来就产生了质的变化(游戏就变的无法忍受了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值