为什么List<T>的MoveNext()实现使用localList?

c#

我读了实现的MoveNext()中List<T>

public bool MoveNext() {
    List<T> localList = list;
 
    if (version == localList._version && ((uint)index < (uint)localList._size)) 
    {                                                     
        current = localList._items[index];                    
        index++;
        return true;
    }
    return MoveNextRare();
}

将引用复制list到本地 var 有localList什么意义?

如果它们都指向同一个对象,为什么不能替换localListwith 的所有实例list

回答

可能这是一个性能问题。访问局部变量比访问实例变量稍快。而且 - 这List可能是 CLR 中最常用的类之一 - 具有良好的性能很重要。

局部变量可以直接从堆栈或寄存器中读取,而实例变量读取对象的地址,然后获取与其相关的值。


以上是为什么List&lt;T&gt;的MoveNext()实现使用localList?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>