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


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

有一个项目使用了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()的问题吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值