IEnumerable 的预期性能是什么?说没有办法知道迭代任意 IEnumerable 的性能。每次迭代都可以访问数据库或进行网络服务调用;或者它可能只返回数组/列表中的下一项。
鉴于此,有没有一种很好的方式来表示“这很快”?例如,有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 { return m_data; } }
}