使用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