Caesar的GetOrAdd组件如何比我的更高效?

时间:2014-01-04 07:09:39

标签: c# comparison unity3d performance

Cawas的GetOrAddComponent扩展方法(http://wiki.unity3d.com/index.php/GetOrAddComponent)对我帮助很大(特别是如何创建泛型方法并向我介绍扩展方法),但我很好奇它如何更有效率比我的:

public static T GetOrAddComponent<T>(this GameObject obj) where T:Component
{
    if(obj.GetComponent<T>() == null)
    {
        return obj.AddComponent<T>();
    }
    else
    {
        return obj.GetComponent<T>();
    }
}

在我的例子中,一个变量没有被创建并存储在内存中,所以这不会使我的效率更高吗?还是有什么我错过的? (这很可能,我只是一个初学者:P)

1 个答案:

答案 0 :(得分:1)

链接的方法调用GetComponent;您在此处粘贴的代码会进行两次此类调用。这是一个足够大的差异,它可能会在重负荷下出现。

根据编译器的不同,比较一个局部变量的可能性与可比的匿名值不同,或者完全不同。最后,它们都在堆栈中处理。