#应减少UnityEngine.Object的null比较
因为Unity overwrite掉了Object.Equals(),《CUSTOM == OPERATOR, SHOULD WE KEEP IT?》也说过unityEngineObject==null事实上和GetComponent()的消耗类似,都涉及到Engine层面的机制调用,所以UnityEngine.Object的null比较,都会有少许的性能消耗。对于基础功能、调用栈叶子节点逻辑、高频功能,我们应少null比较,使用assertion来处理。只有在调用栈根节点逻辑,有必要的时候,才进行null比较。
而且,从代码质量来看,无脑的null保护也是不值得推崇的,因为其将错误隐藏到了更偏离错误根源的逻辑。理论上,当错误发生了,应尽早报错,从而帮助开发者能更快速地定位错误根源。所以,多用assertion,少用null保护,无论是对代码质量,还是代码性能,都是不错的实践。
#应减少不必要的Transform.position/rotation等访问 每次访问Transform.position/rotation都有相应的消耗。应能cache就cache其返回结果。
#应尽量为类或函数声明为sealed
#减少Dictionary的冗余访问 我们常习惯编写这样的代码: if(myDictionary.Contains(oneKey)) { MyValue myValue = myDictionary[oneKey]; // … }
但其可减少冗余的哈希次数,优化为: MyValue myValue; if(myDictionary.TryGetValue(oneKey, out myValue)) { // … }