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