• Exception引起的性能问题


    先show一下两段代码,两段代码都能比较好的实现业务逻辑,但是在高并发下,如果传入的参数为空,那么两段代码的性能表现完全不一样。

    private static string Get(string filter)
            {
                if (string.IsNullOrEmpty(filter))
                    return "Error";
                else
                    return "OK";
            }

    private static string GetData(string filter)
            {
                if (string.IsNullOrEmpty(filter))
                    throw new ArgumentException();
                else
                    return "OK";
            }

    下面是两个方法各循环1000次代码和结果:

    static void Main(string[] args)
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                for (int i = 0; i < 1000; i++)
                {
                    Get(string.Empty);
                }
                sw.Stop();
                Console.WriteLine("Loop 1000 Get Method :" + sw.ElapsedMilliseconds);

                sw.Start();
                for (int i = 0; i < 1000; i++)
                {
                    try
                    {
                        GetData(string.Empty);
                    }
                    catch
                    { }
                }
                sw.Stop();
                Console.WriteLine("Loop 1000 GetData Method :" + sw.ElapsedMilliseconds);

                Console.ReadLine();
            }

    image

    通过数据来看,性能差异还是非常非常大的。“不要用异常做逻辑判断”,写代码时要时刻谨记这条原则,否则一不小心就挖坑了。

  • 相关阅读:
    DDL-表的管理
    DDL-库的管理
    Linux虚拟机--进入MySQL报错的解决办法
    前端底层-原型
    前端底层-对象与构造函数
    前端底层-this
    前端底层-DOM
    前端底层-数据类型与数据的三大存储格式
    前端底层-函数
    前端底层-数据类型与全局属性
  • 原文地址:https://www.cnblogs.com/vveiliang/p/6637935.html
Copyright © 2020-2023  润新知