这个问题的答案是什么了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>s将具有截然不同的性能特征.
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 …Run Code Online (Sandbox Code Playgroud)