2013-12-18 220 views
2

我正在尋找從CSV文件讀取數據的最快方法。我嘗試了這兩種不同的方式。從CSV文件讀取數據

方法#1:讀取所有從CSV文件中的行的成陣列的隨後迭代數組:

String[] csv = File.ReadAllLines(@"E:\be.csv"); 

for (int i = 0; i < csv.Length; i++) 
{ 
    tx.Text = csv[i]; 
    tx.Refresh(); 
} 

方法#2 *:使用StreamReader

StreamReader sr = new StreamReader(new FileStream(@"E:\be.csv"); 

while (!sr.EndOfStream) 
{ 
    string seg = sr.ReadLine(); 
    tx.Text = sr.ReadLine(); 
    tx.Refresh(); 
} 

使用StreamReader似乎要快得多。是否有更快的方法從CSV文件導入數據?

+5

不要試圖解析它yoruself,只是使用CSV解析器,這樣你就不需要自己解析字符串,並處理所有奇怪的問題(例如引用轉義),也可以只是專注於使用數據。是的,無論何時處理任何文件,除非有令人信服的理由,否則您應該傳輸數據。 – Servy

+1

快速通常不是您需要擔心的CSV。正確的是。你可能會認爲你所需要做的就是用逗號分開,但這會讓你陷入一個受傷的世界。谷歌一些[CSV解析器](http://stackoverflow.com/questions/906841/csv-parser-reader-for-c) – paqogomez

+1

此外,什麼是'tx',爲什麼它有意義刷新它在一個循環內? –

回答

3

我必須建議可以在NuGet中找到的CsvHelper。昨天第一次使用它,現在將是我的解決方案。

http://www.nuget.org/packages/CsvHelper/

對於什麼是速度更快您的實際問題,我可能會說只是在做File.ReadAllLines(...),但它是最適合你的實際嘗試並建立了一個測試做幾件兩個選項百倍,看看哪一個花了最長的時間。

此外,不要忘記處置您的StreamReader。繼續並將其包裝在using聲明中,以便所有內容都可能被關閉/處置。

3

塞巴斯蒂安羅蘭的Fast CSV Reader on CodeProject可能是要走的路。

它實現了IDataReader並且大部分行爲類似於StreamReader。

強烈推薦。