使用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 - 我将这两个文件移动到其他位置,它对读取时间没有影响。两个文件都是在几秒钟内从同一程序导出的。
答案 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()));
}
}