使用C#我正在将文本文件中的数据读取到二维列表中以供进一步处理。每个文件是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 =>读取速度快
https://www.dropbox.com/s/4xrgdz0nq24ypz8/FOV2_t2.txt?dl=0 =>读取慢
在回答对一些评论: @AntDC - 什么构成了有效的双重?我尝试用Convert.ToDouble替换Parse.Double,但没有任何改进。
@亨克霍尔特曼 - 读取时间的差异非常明显< 1秒的第一个文件和约。 50秒为第二个文件。它似乎是可重复的。
@Slai - 我将这两个文件都移到了其他位置,它对读取时间没有影响。两个文件都在几秒钟内从同一个程序中导出。
是否所有thye值都有效双打? Double.Parse对无效双打可能会很慢。 – AntDC
指定“很长时间”。关于其他情况。这是可重复的吗?你如何衡量,你做了什么来消除GC和I/O文物? –
好像文件是碎片的,这意味着文件散布在硬盘的多个部分,而不是仅仅一个连续的区域。您可以运行磁盘碎片整理程序,或将这些文件复制到新位置。 – Slai