2014-12-22 154 views
0

我試圖找出一些使用大型數據文件的最佳方法。我有一個場景,我將有幾個CSV文件,其中我希望能夠查詢數據。我將逐行讀取一個csv文件,但我需要能夠根據當前正在閱讀的行中的一個鍵來查詢第二個CSV文件。我不想(至少我不認爲)將整個CSV加載到內存對象中,因爲它們可能是數百萬行,並且會佔用大量內存。我曾考慮過將它們寫入某種數據庫文件,但由於您本質上覆制了數據,因此效率不高。有什麼建議麼?使用大型csv文件

+0

打開需要進行逐行讀取在25%塊在不同的線程 – prospector

+1

可能是你可以考慮運行將您的CSV文件數據庫後臺服務的人。那麼你可以很容易地讓SQL查詢 – Saravanan

+0

的要求不明確,也許你只需要第一個CSV的單行做查詢,如果是這樣的話'StreamReader.ReadLine()'就足夠了。如果您確實需要100萬行的所有密鑰來執行查詢,那麼您沒有更好的選擇。 – kennyzx

回答

-1

您可以嘗試OleDb,使用數據適配器在數據表中加載數據,並對其執行查詢。這link解釋

String conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\; 
    Extended Properties=""Text;HDR=No;FMT=Delimited"""; 

OleDbConnection cn = new OleDbConnection(conn); 
OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM C:\Temp\teams.csv", cn); 
OleDbDataAdapter da = new OleDbDataAdapter(cmd); 

cn.Open(); 

DataTable dt = new DataTable(); 

da.Fill(dt); 
+0

答案沒有考慮OP對RAM使用情況的擔憂。 – Aron

+0

@Suresh將它加載到內存中並不是真正的選擇。這些文件可能有1-2列,30列。看來,把他們扔到數據庫上是我最好的選擇。 – collinszac10

+0

我明白了,是的,在這種情況下,上述解決方案將無法正常工作。 – Suresh