只说我遇到的情况,至于理论方面的问题没有去考究,所以提出问题和我的解决方法,欢迎有人解答或者去探究一下。
有一个项目使用了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()的问题吗?