IEnumerableの期待されるパフォーマンスは何ですか?任意のIEnumerableを反復するパフォーマンスについて知る方法はないと言います。各反復はデータベースにヒットするか、Webサービス呼び出しを行う可能性があります。または、配列/リスト内の次の項目を返すだけの場合もあります。
それを考えると、「これは速い」ことを示す良い方法はありますか?たとえば、私と一緒に、T[]
またはList<T>
その代わりに、からへの移行が迅速になることIEnumerable<T>
を知っています。(もちろん、列挙型にリスト/配列を返すように強制すると、他のパフォーマンス上の懸念が生じる可能性が あります。編集可能なセマンティクスも公開されます。)T[i]
T[i+1]
List<T>
逆に、 「これは遅い」ことを示す良い方法ではIQueryable<T>
なく、戻ることでしょうか。IEnumerable<T>
または多分IEnumerable<Task<T>>
?
のクライアントは、が劇的に異なるパフォーマンス特性を持つC
ことを知る方法がありません。IEnumerable<T>
class C
{
readonly T[] m_data;
public IEnumerable<T> ThisWillIterateQuickly { get { return m_data; } }
public IEnumeralbe<T> ThisWillIterateSlowly
{
get
{
T retval = ... an expensive database call ...;
yield return retval;
}
}
public IQueryable<T> IsThisBetterForSlow { get { return ThisWillIterateSlowly; } }
public T[] IsThisAGoodWayForFast { get { return m_data; } }
}