• 简单的代码片段性能测试 顺便测一下正则和异常的性能(使用循环测试做比较)


    昨天,在群里.有人讨论正则很好,可以进行验证,就避免了异常的性能损耗.结果,顺着这个话题就谈论下来了. 有人说正则耗能也不少.有人说异常耗能也不多...

    俺本着没有调查没有发言权的观点,进行了一下测试,结果差距如下:

    单位(ms) 首次编译   第二次 第三次 第四次 第五次 重新编译
    正则测试 0 0 0 0 0 0
    异常测试 43 23 20 15 17 41  

    循环测试

     10万次

    0 0 0 0 0 0

    循环测试

     100万次  

    3 3 3 3 3 3  

    循环测试

     1000万次

    33 33 33 33 33 34

    解释:

    首次编译时,异常耗时非常之多, 循环10万次耗时是0ms,循环100万次是3ms.而且每次刷新很固定.没有变动.

    而异常的第二次~第五次(是没有重新编译的). 刷新有变动. 基本徘徊在15~27ms之间. 而正则一直是0ms的稳定.

    综上:异常的耗时还是非常之多的...(与循环测试做下比较就可知道)

     

    以下是测试的代码片段:

      public partial class RegexTest : System.Web.UI.Page
        {
            private const String TEST_DATA = "2009-02-40";
            protected void Page_Load(object sender, EventArgs e)
            {
                TestRegex();
                TestTryCatch();
                TestWhile();
            }
    
            private void TestWhile()
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                for (int i = 0; i < 10000000; i++)
                { }
                sw.Stop();
                Label1.Text += "循环10000000测试用时:   " + sw.ElapsedMilliseconds + "ms" + "<br/>";
            }
            private void TestRegex()
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                bool isDate = Regex.IsMatch(TEST_DATA, @"^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-9]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$");
                Label1.Text += "正则判断:" + (isDate == true ? "日期型数据" : "非日期型数据") + "<br/>";
                sw.Stop();
                Label1.Text += "正则测试用时:   " + sw.ElapsedMilliseconds + "ms" + "<br/>";
            }
    
            private void TestTryCatch()
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                try
                {
                    DateTime n = Convert.ToDateTime(TEST_DATA);
                    Label1.Text += "异常判断:日期型数据<br/>";
                }
                catch
                {
                    Label1.Text += "异常判断:非日期型数据<br/>";
                }
                sw.Stop();
                Label1.Text += "异常测试用时:   " + sw.ElapsedMilliseconds + "ms" + "<br/>";
            }
        }
    

  • 相关阅读:
    CF219D
    HDU 4259 Double Dealing 数学题
    HDU1599 find the mincost route 最小环
    HDU3592 World Exhibition 排队判断3种情况
    POJ3694 Network 加边查询剩余桥的个数
    Flex 如何获得Tree 拖动节点的起始位置
    wcf webconfig配置
    学JS面向对象 以及里面的继承
    sqlserver 几种查询耗时
    ubuntu更改文件夹属性
  • 原文地址:https://www.cnblogs.com/tweet/p/1753766.html
Copyright © 2020-2023  润新知