作者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
1F:推 Laluth:测效能用Stopwatch 07/20 17:06
2F:→ chentsungmin:试试 Regex.Replace方法 07/23 15:55
3F:→ stu87616:不是欸@@ 我要取代的字元都已经很明确了 07/23 16:17
4F:→ stu87616:加上Regex不会更快吧 07/23 16:18
5F:→ yeo1987:字元修改前後长度一样的话, 指标 + hash 跑回圈? 07/23 16:31
6F:推 chchwy:Regex铁定是最慢的,这方法就不用看了... 07/23 19:42
7F:→ stu87616:字元修改长度不是一样的 所以不可行.. 07/24 09:13
8F:推 leekp:.Replace("b","c").Replace("a","b) !? 08/02 12:25