Unity 判空性能研究和遇到的坑。

在做新能优化时注意到判空产生了能引起注意的性能百分比。

转而尝试使用C#的判空方式。性能测试比较如下:
Unity 判空性能研究和遇到的坑。_第1张图片
由上图可见,C# 判空性能是Unity Object使用“==”的8倍。

这是因为Unity重载了“==”,以保证在Destroy gameobject后能正确判空。

	public static bool operator ==(Object x, Object y)
    {
      return Object.CompareBaseObjects(x, y);
    }
 
    private static bool CompareBaseObjects(Object lhs, Object rhs)
    {
      bool flag1 = (object) lhs == null;
      bool flag2 = (object) rhs == null;
      if (flag2 && flag1)
        return true;
      if (flag2)
        return !Object.IsNativeObjectAlive(lhs);
      if (flag1)
        return !Object.IsNativeObjectAlive(rhs);
      return lhs.m_InstanceID == rhs.m_InstanceID;
    }

并且标记了[SerializeField] 的变量,并不是一个空的System.object,无法使用ReferenceEquals进行判空。

你可能感兴趣的:(Unity)