作者stu87616 (以光為名)
看板C_Sharp
標題[問題] 取代(Replace)的運作效能請益
時間Fri Jul 20 13:42:43 2012
事情是這樣的,在下正在的寫的專案中有一個需要大量取代字元的部分,
大概就像是,一個字串裡面的a通通變成b,b都變成c...等等,
我原本的做法是,用一個for迴圈從頭到尾給它全部跑一遍,
遇到a就+=一個b到另一個儲存用的字串...這樣的做法。
但這樣的寫法我一直都覺得毛毛的,好像太笨,效能會太差,
後來經過老師的提點,發現還有Replace這個指令可以用,
於是乎我把程式改為Replace的做法試試看,
先StringBuilder一個出來,
ToLower (這個專案大小寫不重要,重要是一定要取代乾淨)
接著就是數行Replace指令 (要取代的項目還挺多的)
我讓字串都先取代成大寫,這樣就不怕重複取代到,
最後再補一個ToLower,完成。
程式碼變得清爽很多(原先的迴圈+大量if else判定超肥),
但是!!悲劇的發現,執行效能不但沒有變快,反而似乎還更低了?!
我是不知道怎麼詳細的測執行速度啦,
(看板上都可以報出0.xxxxxxxxxxxxxxx的超詳細數值)
不過資料量一大,勝負還蠻明顯的,原先需要跑個兩秒,
改成Replace就跑到三秒+了。請益,是不是這樣的Replace寫法不適,
或Replace本就沒辦法很快...?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.169.34.157
推 Laluth:測效能用Stopwatch 07/20 17:06
→ chentsungmin:試試 Regex.Replace方法 07/23 15:55
→ stu87616:不是欸@@ 我要取代的字元都已經很明確了 07/23 16:17
→ stu87616:加上Regex不會更快吧 07/23 16:18
→ yeo1987:字元修改前後長度一樣的話, 指標 + hash 跑迴圈? 07/23 16:31
推 chchwy:Regex鐵定是最慢的,這方法就不用看了... 07/23 19:42
→ stu87616:字元修改長度不是一樣的 所以不可行.. 07/24 09:13
推 leekp:.Replace("b","c").Replace("a","b) !? 08/02 12:25