从文本文件中读取双倍数据 - 读取时间的差异

时间:2016-11-14 12:12:58

标签: c# double string-parsing

使用C#I将文本文件中的数据读入2D列表以进行进一步处理。每个文件是256个双打,空格分隔256行,每行读入双打列表,每个列表添加到行列表中。所有文件都有256x256 = 65,536个数据点。

我有代码可以读取文件并且可以很好地处理某些文件,但对于其他文件则需要很长时间。由于所有文件都以相同的方式格式化并包含相同数量的数据点,我不了解读取时间的差异,任何人都有任何想法?

如何加快文件2的读取时间?

以下是我使用的代码:

        private Data ReadData (string name, string file)
        {
            List<List<Double>> data_points = new List<List<Double>>();

            String input = File.ReadAllText( file );

            foreach (string row in input.Split('\n'))
            {
                List<Double> line_list = new List<double>();
                foreach (string col in row.Trim().Split(' '))
                {
                    if(row != "")
                    {
                    line_list.Add(double.Parse(col.Trim()));
                    }

                }
                if(line_list.Count > 1)
                {
                data_points.Add(line_list);
                }
            }

            Data temp_data = new Data(name, data_points);
            return temp_data;
        }

示例文本文件位于:

https://www.dropbox.com/s/diindi2qjlgoxep/FOV2_t1.txt?dl=0 =&gt;读得快

https://www.dropbox.com/s/4xrgdz0nq24ypz8/FOV2_t2.txt?dl=0 =&gt;阅读缓慢

回答一些评论: @AntDC - 什么构成有效的双倍?我尝试用Convert.ToDouble替换Parse.Double没有任何改进。

@Henk Holterman - 读取时间的差异非常明显&lt; 1s表示第一个文件,大约1秒。 50秒为第二个文件。它似乎是可重复的。

@Slai - 我将这两个文件移动到其他位置,它对读取时间没有影响。两个文件都是在几秒钟内从同一程序导出的。

1 个答案:

答案 0 :(得分:2)

性能方面,您可以优化代码,而不是读取整个文件,然后再拆分。只需逐行阅读。

List<Double> line_list = new List<double>();
foreach (string line in File.ReadLines("c:\\file.txt"))
{
    string[] rows = line.Trim().Split(' ');

    foreach(string el in rows)
    {
        line_list.Add(double.Parse(el.Trim()));
    }
}