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

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

posted @   凌晨三点半  阅读(1252)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示