汎用コレクションが列挙子をどのように最適化したかを確認するために 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
私を悩ませ、エラーのケースと空のコレクションのケースが含まれているため、明らかにこれは関心の分離に違反しています。
スタック スペースを最適化し、JIT を支援するために、メソッドがこのように分割されていると仮定しMoveNext
ます。また、パフォーマンスのボトルネックの一部についても同じことを行いたいと考えていますが、ハード データがなければ、ブードゥー教のプログラミングを貨物に変えたくありません。カルト;)
ありがとう!フロリアン