1

预计属性的性能类似于字段,即使它们实际上是函数。可以说任意的预期性能是IEnumerable什么?

从属性中借用这个概念并说 anIEnumerable应该与迭代数组或 的性能大致相同是否公平List<T>

或者,每次迭代都会发生任何事情是否可以:数据库访问、Web 服务调用、耗时的计算等。

4

4 回答 4

1

根据经验,您无法真正推断出任意IEnumerable. 例如,它可能是IQueryable变相的,每次枚举时都会访问数据库。或者它可能是 的结果File.EnumerateLines

有时重要的是可枚举只枚举一次。

这与属性相反。如果一个属性要访问数据库或读取 I 文件,我会认为这是代码异味。对于一个IEnumerable这只是正常的。

于 2012-06-05T21:36:29.580 回答
1

我想说没有关于 anIEnumerable<T>应该如何执行的规则 - 只有关于它应该如何表现,这意味着它应该循环通过你的集合。

如果您需要在迭代开始时访问数据库(如 Entity Framework 的IQueryable<T>),那很好 - 如果它需要对每个项目进行数据库或文件调用,那很好。对我来说唯一重要的是您可以循环播放它。

于 2012-06-05T21:37:43.843 回答
0

IEnumerable 没有属性,但如您所知,IEnumerable 返回一个 IEnumerator。

如果您的对象公开了一个 IEnumerable 类型的属性,该属性预计将在恒定时间内返回,但该枚举器的枚举可能不应该有任何期望

当然,您的情况可能会有所不同。例如,如果您将一些 WPF 控件绑定到该可枚举,您的用户将希望它快速返回。

于 2012-06-05T21:38:26.530 回答
0

AnIEnumerable当然可以用于访问数据库或爬取文件,但是如果您公开了这样的IEnumerable,您应该清楚地记录它这样做。

如果不能立即明确它是否昂贵,您应该适当地封装它,并且只公开一个内存中的枚举。

于 2012-06-05T21:39:53.547 回答