现在的位置: 首页 > 综合 > 正文

IEnumerable.ElementAt(index)的低效率问题

2018年02月12日 ⁄ 综合 ⁄ 共 611字 ⁄ 字号 评论关闭

只说我遇到的情况,至于理论方面的问题没有去考究,所以提出问题和我的解决方法,欢迎有人解答或者去探究一下。

有一个项目使用了Linq to Csv来处理csv文件,我这个csv文件有260多个列,1500多行的数据内容,先把数据按照已经定义好的对象反序列化,

得到了一个IEnumerable<MyObject>的对象。然后我用for循环去获取其中的一些内容,如下面的例子:

首先定义一个对象Persion,他有三个属性Name、Age、Sex。

//先假如我们有个1500个实例的Persion对象集合IEnumerable<Persion> persions。
int num=0
for(int i=0;i<10;i++)
{
for(int j=num;j<num+90;j++)
{
      string pesrionName=persions.ElementAt(j).Name;
}
num+=90;
}

大家可能觉得这个for循环会很快执行完成,单实际却可能与你的想象差之千里,几分钟都没有执行完,好的情况也是至少要1分钟以上,我就很纳闷了,

但是我调试发现前个for外循环执行还是挺快,后来越来越慢,到后边就跟卡住了一样。

没办法,想了半天没有找到是如何问题所在,项目急,我就换了种方式,

先利用IEnumerable<>的ToArray()方法转成数组,然后再去处理,速度就非常快了。

在此求解,真是IEnumerable<>.ElementAt()的问题吗?

抱歉!评论已关闭.