c# 中字符串搜索 indexof 与 正则表达式效率比较

        public void 性能测试()
        {
            string res = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<xxxMsg xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n  <Message>10</Message>\r\n  <Time>2014-04-30T15:26:15.3256946+08:00</Time>\r\n  <SyncPointTagName>ddddd</SyncPointTagName>\r\n  <TerminalCode>50001334</TerminalCode>\r\n</xxxMsg>";

            //100万次计算
            var arr = System.Linq.Enumerable.Range(1, 1000000);

            //方法1
            Action act = () => { foreach (var k in arr) { forFun(res); } };

            //方法2
            Action act2 = () => { foreach (var k in arr) { forRegx(res); } };

            //fro 用时7860
            System.Diagnostics.Debug.WriteLine("fro 用时" + Stopwatch(act));
            //regx 用时1056
            System.Diagnostics.Debug.WriteLine("regx 用时" + Stopwatch(act2));

        }


        /// <summary>
        /// 用for查找
        /// </summary>
        /// <param name="res"></param>
        protected void forFun(string res)
        {
            //这东西写到外部,效率应该会高一点点
            string msg = string.Empty;
            string tag = "<Message>";
            int startindex =res.IndexOf(tag) + tag.Length;
            int endindex = -1;
            for (int k = startindex; k < res.Length; k++)
            {
                char curchar = res[k];
                if (curchar >= 48 && curchar <= 57)
                {
                    endindex = k;//这里还可以用msg+=curchar ;

                }
                else
                {
                    break;
                }
            }
            msg = res.Substring(startindex, endindex - startindex);
        }
        /// <summary>
        /// 正则查找
        /// </summary>
        /// <param name="res"></param>
        protected void forRegx(string res)
        {
            //这东西写到外部,效率应该会高一点点
            string msg = string.Empty;
            string tag = "<Message>";
            msg = System.Text.RegularExpressions.Regex.Match(res, tag + "\\d{1,}").Value;

        }


        /// <summary>
        /// 测试运行时间
        /// </summary>
        /// <param name="method">需要执行的方法</param>
        /// <param name="summary">对方法的说明</param>
        /// <returns>返回,这个方法执行用了多少毫秒</returns>
        public static long Stopwatch(Action method)
        {
            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            watch.Restart();
            //运行方法
            method.Invoke();

            watch.Stop();

            return watch.ElapsedMilliseconds;
        }
        /// <summary>
        /// 测试运行时间
        /// </summary>
        /// <param name="method">需要执行的方法</param>
        /// <param name="obj">参数对像</param>
        /// <returns>返回,这个方法执行用了多少毫秒</returns>
        public static long Stopwatch<T>(Action<T> method, T obj)
        {
            return Stopwatch(new Action(() =>
                                            {
                                                method.Invoke(obj);
                                            }));
        }
可以看到,,,,使用正则表达式的结果需要10秒左右,而使用indexof 的搜索只需要7秒多.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值