使用List.Add方法添加元素的速度太慢,这种情况应该怎么处理?
using (StreamReader sr = new StreamReader(pr.path))
{
string line = "";
Stopwatch sw = new Stopwatch();
sw.Reset();
sw.Start();
do
{
line = sr.ReadLine();
xdata.Add(double.Parse(line.Split(',')[0]));
ydata.Add(double.Parse(line.Split(',')[1]));
zdata.Add(double.Parse(line.Split(',')[2]));
}
while (!sr.EndOfStream);
sw.Stop();
TimeSpan ts = sw.Elapsed;
int seconds = ts.Seconds;
Console.WriteLine("seconds:" + seconds.ToString());
}
以上的do-while循环中,我测试了如果注释了三个list.add语句,循环的时间只有3s,如果不注释,循环的时间达到了31s,差了非常多!
使用别的方式添加,以达到快速循环结束的方法
一个文件800M确实有些大了,不过我认为你的代码里面也有需要优化的空间;
优化方向建议如下:
1、你读出的文件都是按照逗号进行分割的,可以在读的时候直接进行按逗号读取
引用Microsoft.VisualBasic.FileIO.TextFieldParser
核心代码如下:
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
2、可以采用多线程方式读取,并行进行处理
比如可以按行数起线程进行操作,第一个线程读1-2000行,第二个2001-4000行等,处理完成后再进行合并即可;
具体行数可以自己设计....
以上仅供参考
光循环就循环3秒,你是有多少数据要处理啊
这么多数据该存数据库存数据库,不要什么都存文件里,那处理起来能不慢吗