Unity 项目性能优化

代码:

1、防止内存泄漏,在架构上可以灵活使用abstract,并注意自己写的代码
2、严格控制static的使用
3、SendMessage、BroadcastMessage;使用了反射机制造成高开销,可以考虑使用事件委托 代替。
4、用 协程 替代 Invoke、InvokeRepeating 也使用了反射,可以使用协程替代。
5、删除脚本中没有必要的空函数:尤其是继承于Mono的 Start、Update 等。
6、Camera.mainFind方法类似,应该避免重复使用,可以缓存下来在使用时调用。
7、数组集合遍历使用for,字典使用foreach
8、对象池: 将重复使用的某一类对象用对象池进行管理
9、大量的字符串拼接 避免使用 “+”,用StringBuilder替代。
10、某块代码必须在update中执行,如果没有必要每帧都执行,可以如下代码

void update()
{
	//每隔3帧调用一次
	if ( Time.frameCount % 3 == 0 )
	{
		//需要调用的代码
	}
}

11、在Update、OnGUI等函数中,尽量少使用临时变量
12、大量的数学运算中,可以将除法改为乘法:x=y/2; 改为:x=y*0.5f;
13、不要频繁使用GetComponent 来获取组件
14、尽量使用Ray来代替OnMouseXXX

养成写代码时的好习惯

--------------------------------------我是华丽的分割线--------------------------------------

前两天做了个数组、集合性能测试: 一: Dictionary:

(一)取值:一般取值操作是先判断key是否存在,如果存在就返回value,不存在就会报错; 而使用TryGetValue(key,out value)进行取值可以省去key值的判断,提高性能。当我们 使用TryGetValue(key,out value)时:key存在,运行效率大约会提高1.5倍,key不存在,效率基本相同。

二:List (一)判断集合中是否包含某个元素:Contains, Exists, Any 判断某个集合中是否包含指定元素,有以下三种方法:
list.Contains(target);
list.Exists(i=>itarget);
list.Any(i=>i
target);
经过测试:它们之间的性能从高到低对比:Contains>Exists>Any;

PS:虽然经过测试发现Contains效率更好,但是Contains和Exists效率很相近,有时使用Exists使代码更简洁易懂,所以在集合数据不大时,也可以使用Exists;不建议使用Any。

-------------------------------持续更新----------------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值