.net core抛异常对性能的影响是什么

发布时间:2022-06-13 09:36:28 作者:zzz
来源:亿速云 阅读:151

今天小编给大家分享一下.net core抛异常对性能的影响是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、前言

二、求证

2.1 使用.net 6 建立了一个简单的web api 项目 新增两个压测接口api接口代码如下

/// <summary>
        /// 正常返回数据接口1
        /// </summary>
        /// <returns></returns        
        [HttpGet("Test1")]
        public async Task<IActionResult> Test()
        {
            return Content("1");
        }

        /// <summary>
        /// 抛异常返回接口2 ,同时存在全局过滤器
        /// </summary>
        /// <returns></returns        
        [HttpGet("Test2")]
        public async Task<IActionResult> Test2(string open)
        {
            throw new BusinessException(Model.EnumApiCode.SignWrong);
        }

全局过滤器代码如下

    /// <summary>
    /// 全局异常日志
    /// </summary>
    public class ExceptionFilter : IExceptionFilter
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="context"></param>
        public void OnException(ExceptionContext context)
        {
            //不做任何处理,直接返回1
            context.Result = new JsonResult("1");
        }
    }

   //全局过滤器注入
   services.AddControllers()
       .AddMvcOptions(option =>
       {
             option.Filters.Add<ExceptionFilter>();
       });

现在对test1 接口并发200的情况下进行压测,持续15分钟的压测结果如下:

.net core抛异常对性能的影响是什么

对通过全局过滤器捕获异常并大量抛出异常 在相同压测条件情况下的压测结果如下:

.net core抛异常对性能的影响是什么

对test1 和test2 同等条件下压测结果对比

接口tpscpu压测条件
test110300左右cpu消耗90%左右并发200,持续压测
test24300左右cpu消耗100%左右并发200,持续压测

目前得到的结论是抛异常确实影响性能,并且对性能下降了60% 左右,上面主要是异常流程走了全局过滤器方式,故参考意义不大,下面再进一步修改代码进行压测

对test2 代码进行修改如下

/// <summary>
        /// 抛异常返回接口2 ,直接try catch 不走全局过滤器
        /// </summary>
        /// <returns></returns        
        [HttpGet("Test2")]
        public async Task<IActionResult> Test2()
        {
            try
            {
                throw new BusinessException(Model.EnumApiCode.SignWrong);
            }
            catch (Exception ex)
            {
                return Content("1");
            }
        }

再对修改后的test2 接口进行压测,压测结果如下:

.net core抛异常对性能的影响是什么

接口tpscpu占用压测条件
test110300左右90% 左右并发200,持续压测
test29200左右91% 左右并发200,持续压测

进一步得到的结论是try catch 后性能有所提高,跟正常相比还有点点差距,全局过滤器对性能影响比较大,相当于走了管道,但是观察代码test1 和test2代码还存在差距,怀疑test2 代码中new 了新异常导致性能差异,故再进一步进行代码修改求证

对test1 代码进行修改,修改后的代码如下:

 /// <summary>
        /// 正常返回数据接口1,但是先new 异常出来,保持跟上面test2 代码一致
        /// </summary>
        /// <returns></returns        
        [HttpGet("Test2")]
        public async Task<IActionResult> Test2(string open)
        {
            var ex= new BusinessException(Model.EnumApiCode.SignWrong);
            return Content("1");
        }

对修改后的test1 代码进行压测结果如下:

.net core抛异常对性能的影响是什么

忘记截图,大概和修改后的test2 代码压测结果相差不大,大概tps 9300左右,故还是拿的上一个图贴出来,谅解

接口tpscpu占用压测条件
test19300左右90%左右并发200,持续压测
test29200左右90%左右并发200,持续压测

进一步得到的结论是try catch 后性能和正常返回代码性能相当,相差无几,可以忽略不计

2.2 最终结论

最后抛出一个待求证的问题

以上就是“.net core抛异常对性能的影响是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

推荐阅读:
  1. MySQL自身对性能的影响
  2. Python异常对代码运行性能的影响实例解析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

core

上一篇:springboot整合netty框架的方式有哪些

下一篇:Keytool如何配置Tomcat的HTTPS双向认证

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》