は、我々は、以下の方法(擬似C#)を持っていることを想像して返すの通話のためのより良い性能特性(メモリ賢明な)を持つ:配列やイテレータ - 1/2の要素
1は、少ないメモリを消費しますstatic IEnumerable<T> Iterator<T>()
{
switch (SomeCondition)
{
case CaseA:
yield return default(T);
case CaseB:
yield return default(T);
yield return default(T);
case CaseC:
yield return default(T);
default:
break;
}
}
static IEnumerable<T> Array<T>()
{
switch (SomeCondition)
{
case CaseA:
return new[] { default(T) };
case CaseB:
return new[] { default(T), default(T) };
case CaseC:
return new[] { default(T) };
default:
break;
}
}
このメソッドのように多くの呼び出しがある場合は、GCサイクルが短くなります。このようなEnumerable.Once()シナリオを実装するには、独自のEnumerable/Enumeratorを記述することは理にかなっていますか?
あなたがコンパイルされ、有効に適切な最適化とリリースビルドの両方のサンプルを実行したときに何が起こったのか? –
どちらもボトルネックではありません。最も読みやすいものを選んでください。 –
メソッドはそれらのシグネチャを*正確に*持つ必要がありますか?これは間違いなくボトルネックですか?ユースケースは何ですか?興味深いオプションがいくつかありますが、より多くの情報が必要です。 –