IEnumerable的预期性能是多少?

时间:2012-06-05 21:33:49

标签: .net performance ienumerable

预期属性的表现与字段类似,即使它们确实是函数。关于任意IEnumerable的预期表现可以说什么?

从属性中借用概念并说IEnumerable应该与迭代数组或List<T>执行相同的操作是否公平?

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

4 个答案:

答案 0 :(得分:1)

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

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

这与属性形成鲜明对比。如果属性是命中数据库或读取I文件我会认为这是代码气味。对于IEnumerable,这是正常的。

答案 1 :(得分:1)

我说没有关于IEnumerable<T>应该执行得多好的规则 - 只关于它应该如何表现,这意味着它应该遍历你的集合。

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

答案 2 :(得分:0)

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

如果你的对象公开了一个IEnumerable类型的属性,那么它应该在恒定时间内返回,但该枚举器的枚举应该没有期望

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

答案 3 :(得分:0)

当然IEnumerable可以用来访问数据库或抓取文件,但是如果你公开这样的IEnumerable,你应该清楚地记录它。

如果不能立即清楚它是昂贵的,你应该适当地封装它,并且只暴露一个内存中的枚举。