[問題] 取代(Replace)的運作效能請益

看板C_Sharp作者 (以光為名)時間12年前 (2012/07/20 13:42), 編輯推噓3(305)
留言8則, 6人參與, 最新討論串1/1
事情是這樣的,在下正在的寫的專案中有一個需要大量取代字元的部分, 大概就像是,一個字串裡面的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

07/20 17:06, , 1F
測效能用Stopwatch
07/20 17:06, 1F

07/23 15:55, , 2F
試試 Regex.Replace方法
07/23 15:55, 2F

07/23 16:17, , 3F
不是欸@@ 我要取代的字元都已經很明確了
07/23 16:17, 3F

07/23 16:18, , 4F
加上Regex不會更快吧
07/23 16:18, 4F

07/23 16:31, , 5F
字元修改前後長度一樣的話, 指標 + hash 跑迴圈?
07/23 16:31, 5F

07/23 19:42, , 6F
Regex鐵定是最慢的,這方法就不用看了...
07/23 19:42, 6F

07/24 09:13, , 7F
字元修改長度不是一樣的 所以不可行..
07/24 09:13, 7F

08/02 12:25, , 8F
.Replace("b","c").Replace("a","b) !?
08/02 12:25, 8F
文章代碼(AID): #1G2E_M4L (C_Sharp)