最近在和一個朋友的交流中,遇到這么一個問題,如何能較快對一個較大的文本文件(1G或更大)的文本行數(shù)進行統(tǒng)計。如果不考慮效率,要統(tǒng)計一個文本的行數(shù)其實一點也不難,但是如果需要在較快的時間內(nèi)做完,恐怕就得考慮實現(xiàn)方法了。 為此,自己嘗試了幾種方法,在這里把這幾種方法拿出來和大家討論一下。 首先是生成測試數(shù)據(jù)的代碼:
.NET4.0 + StreamReader + ReadLine()原理很簡單,使用StreamReader的ReadLine方法,每執(zhí)行一次,行數(shù)加一。代碼如下:
測試結(jié)果如下: 對于以上這種方法,平均每次執(zhí)行時間為55s左右,執(zhí)行效率明顯不盡如人意。 如果我們同樣采用流,不過使用分塊的方式,將文件內(nèi)容一塊一塊讀進內(nèi)存,在解析每塊內(nèi)容的行數(shù),最后相加。這樣做的效率如何呢? .NET4.0 + StreamReader + ReadBlock()
運行結(jié)果如圖: |
|