Noob小李 2022-11-08 16:00 采纳率: 60%
浏览 97
已结题

C#List.Add方法速度太慢,应该如何处理?

问题遇到的现象和发生背景

使用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,差了非常多!

我想要达到的结果

使用别的方式添加,以达到快速循环结束的方法

  • 写回答

2条回答 默认 最新

  • facefriends 2022-11-08 18:17
    关注

    一个文件800M确实有些大了,不过我认为你的代码里面也有需要优化的空间;
    优化方向建议如下:
    1、你读出的文件都是按照逗号进行分割的,可以在读的时候直接进行按逗号读取
    引用Microsoft.VisualBasic.FileIO.TextFieldParser
    核心代码如下:

    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");
    

    2、可以采用多线程方式读取,并行进行处理
    比如可以按行数起线程进行操作,第一个线程读1-2000行,第二个2001-4000行等,处理完成后再进行合并即可;
    具体行数可以自己设计....

    以上仅供参考

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 专家已采纳回答 11月24日
  • 创建了问题 11月8日