我一直在查看 mscorlib 以查看通用集合如何优化其枚举器,我偶然发现了这一点:
// in List<T>.Enumerator<T>
public bool MoveNext()
{
List<T> list = this.list;
if ((this.version == list._version) && (this.index < list._size))
{
this.current = list._items[this.index];
this.index++;
return true;
}
return this.MoveNextRare();
}
堆栈大小为 3,字节码大小应为 80 字节。该MoveNextRare
方法的命名让我大吃一惊,它包含一个错误案例和一个空集合案例,因此显然这违反了关注点分离。
我假设该MoveNext
方法以这种方式拆分以优化堆栈空间并帮助 JIT,我想对我的一些性能瓶颈做同样的事情,但是没有硬数据,我不希望我的巫毒编程变成货物-邪教;)
谢谢!弗洛里安