2015-11-04 188 views
-2

我在c#中有大文件(超過300 MB)。我需要一個很好的方式來逐行讀取文件,因爲一旦我嘗試讀取它,需要超過30分鐘的,而目標時間大約爲3分鐘。我試過File.ReadAllBytes,它能夠非常快速地讀取文件並將其加載到字符串中。但在此之後,需要很長時間才能逐行處理字符串。有更好的方法或更快的方法來做到這一點。在c中讀取大文件行#

提前致謝。

+2

聽起來像你的問題不是加載,而是處理。你沒有發佈相關的代碼。 – CodesInChaos

+2

我們在談論什麼樣的過程? –

+2

File.ReadLines(由wudzik建議)絕對是一個好主意。但是「300MB」確實不是那麼大。問:這個300MB文件有多少行?更重要的是:問:你在每條線的循環中究竟做了什麼?問:是否有任何方法來優化「每行」處理? – paulsm4

回答

10

您可以使用File.ReadLines,它會通過文件的行列舉:

var lines = File.ReadLines(path); 

foreach(var line in lines) 
{ 
    // do your logic here 
} 

它不會在第一行加載文件。它將在通過lines循環時加載它,所以它是讀取更大文件的更好方法,而不是立即加載它。

MSDN說,在File.ReadLines

備註描述readlines方法和ReadAllLines方法的區別如下:當 您使用readlines方法,你可以返回整個集合之前開始枚舉字符串 的集合;當您使用ReadAllLines, 您必須等待在您可以訪問數組之前返回整個字符串數組。因此,當您使用非常大的文件時,ReadLines可以更高效。

+2

來自msdn的添加信息:>當您使用ReadLines時,可以在返回整個集合之前開始枚舉字符串集合;當您使用ReadAllLines時,必須等待返回整個數組的字符串才能訪問該數組。因此,當您使用非常大的文件時,ReadLines可以更高效。 – niksofteng

+0

@dotnetkid我只是從MSDN添加引用:) – wudzik