從
同一個(gè)源文件(15M左右)使用不同的方式讀入,一種是讀入后構(gòu)造成一個(gè)String,另外一個(gè)是讀入后構(gòu)造成一個(gè)List。然后再調(diào)用
writeLines(File, String)和writeLines(File, Collection)寫(xiě)入。下面是測(cè)試比較的結(jié)果:
Read and write by string format
File sizes(bytes): 15661680
Content read(bytes): 15661680
Time costing(ms) on reading: 2047
Time costing(ms) on writing: 1016
Read and write by collection format
File sizes(bytes): 15661680
File read(lines): 1782615
Time costing(ms) on reading: 2047
Time costing(ms) on writing: 533437
效率相差之多! 我的測(cè)試環(huán)境如下:
OS:Win XP SP4
CPU:Intel Core(TM) 2 Duo CPU
內(nèi)存:800M(虛擬機(jī)分配)
JDK:JDK 5.0 (JVM內(nèi)存分配:-Xms64m -Xmx512m)
測(cè)試文件:15.295M (是一個(gè)IP地址文件,總共1782615行)
在讀方面時(shí)間居然相當(dāng)(這里面應(yīng)該有操作系統(tǒng)層面的緩沖作用,我單獨(dú)地測(cè)試時(shí)第2個(gè)方式總比第一個(gè)慢1/3左右)。而在寫(xiě)方面性能簡(jiǎn)直是天壤之別啊:533437/1016 ≈525倍。
雖然我這個(gè)測(cè)試還是不嚴(yán)謹(jǐn)?shù)模菑姆椒▽?shí)現(xiàn)過(guò)程和原理來(lái)看,兩者性能差異存在必然的因素:
①以Collection方式去構(gòu)造的,在讀取的過(guò)程中生成多個(gè)小String,而生成String是一項(xiàng)耗時(shí)的工作
②以Collection方式去寫(xiě)的,首先要迭代這個(gè)Collection,然后每次調(diào)用Collection中的元素的toString()方法,造成多次的堆棧操作
posted on 2010-03-30 00:19
Paul Lin 閱讀(6058)
評(píng)論(0) 編輯 收藏 所屬分類:
J2SE