iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >浅析.netcore抛异常对性能影响
  • 626
分享到

浅析.netcore抛异常对性能影响

2024-04-02 19:04:59 626人浏览 独家记忆
摘要

目录一、前言二、求证2.1 使用.NET 6 建立了一个简单的WEB api 项目 新增两个压测接口api接口代码如下2.2 最终结论参考文献异常和正常代码性能旗鼓相当,但是全局过滤

异常和正常代码性能旗鼓相当,但是全局过滤器对性能影响比较大,大概降低了60%左右,全局过滤器走了管道,但是这跟微软官方的性能优化又有冲突,想必微软官方也是出于对全局过滤器异常处理的考虑吧。同时对于添加了业务的情况下,这个降低会被稀释,没去做压测对比哈,正常用户体量还不至于被这个给影响到稳定性。所以怎么取舍看自己

一、前言

.net 相关技术群、网络上及身边技术讨论中看到过关于大量抛异常会影响性能这样的结论,心中一直就存在各种疑问。项目中使用自定义异常来处理业务很爽,但是又担心大量抛业务异常存在性能问题。
查阅了各种文档,微软官方对性能优化这一块也不建议使用过多的异常,故我心中冒出疑问。

  • 疑问一:项目中大量抛出业务异常对性能是否会受到影响?

二、求证

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分钟的压测结果如下:

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

对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 接口进行压测,压测结果如下:

接口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 代码进行压测结果如下:

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

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

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

2.2 最终结论

  • 异常和正常代码性能旗鼓相当,但是全局过滤器对性能影响比较大,大概降低了60%左右,全局过滤器走了管道,但是这跟微软官方的性能优化又有冲突,想必微软官方也是出于对全局过滤器异常处理的考虑吧。同时对于添加了业务的情况下,这个降低会被稀释,没去做压测对比哈,正常用户体量还不至于被这个给影响到稳定性。所以怎么取舍看自己
  • 这里不否定使用 全局过滤器进行业务自定义异常捕获,是否最外层try catch 掉还是全局过滤器去捕获处理,自己根据复杂度和性能两者中自行取舍,至少全局过滤器处理异常从性能角度上来说不是优雅的解决方式
  • 对于非自定义异常,尽量按照微软官方建议
  • 使用 “测试者-执行者”模式
  • “尝试-分析”模式

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

  • 疑问一:大量抛出非自定义异常,性能和正常返回性能对比会如何?比如字符串转换int 不使用TryParse 去转换

以上结论个人压测结果,如有不对,欢迎交流纠正​

参考文献

https://docs.microsoft.com/zh-cn/dotnet/standard/design-guidelines/exceptions-and-perfORMance

https://docs.microsoft.com/zh-cn/aspnet/core/performance/performance-best-practices?view=aspnetcore-6.0

到此这篇关于.net core 抛异常对性能影响的求证之路的文章就介绍到这了,更多相关.Net Core 抛异常性能影响内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浅析.netcore抛异常对性能影响

本文链接: https://www.lsjlt.com/news/151178.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 浅析.netcore抛异常对性能影响
    目录一、前言二、求证2.1 使用.net 6 建立了一个简单的web api 项目 新增两个压测接口api接口代码如下2.2 最终结论参考文献异常和正常代码性能旗鼓相当,但是全局过滤...
    99+
    2024-04-02
  • .net core抛异常对性能的影响是什么
    今天小编给大家分享一下.net core抛异常对性能的影响是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、...
    99+
    2023-07-02
  • JAVA异常对性能有什么影响
    这篇文章主要介绍“JAVA异常对性能有什么影响”,在日常操作中,相信很多人在JAVA异常对性能有什么影响问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JAVA异常对性能有什么影响”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • JAVA异常是否对于性能有影响
    在对OneAPM的客户做技术支持时,我们常常会看到很多客户根本没意识到的异常。在消除了这些异常之后,代码运行速度与以前相比大幅提升。这让我们产生一种猜测,就是在代码里面使用异 常会带来显著的性能开销。因为异常是错误情况处...
    99+
    2023-06-16
    JAVA 性能 影响
  • JAVA异常是不是对性能有影响
    这篇文章主要讲解了“JAVA异常是不是对性能有影响”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JAVA异常是不是对性能有影响”吧!实验我的实验基于一段随机抛出异常的简单代码。从科学的角度,...
    99+
    2023-06-13
  • GO反射对性能的影响分析
    目录写在前面代码性能分析写在后面写在前面 今天在公司写了一段代码,判断一个变量是否为空值,由于判断的类型太少,code review的时候同事说还有很多类型没有考虑到,并且提到有没...
    99+
    2023-01-06
    GO 反射性能分析 GO 反射
  • 异步编程对 PHP 函数性能的影响
    异步编程可以通过不阻塞主线程和使用轻量级协程来提升 php 函数性能,实战中可用于优化 http 服务器的并发处理能力,从而提高吞吐量和响应时间。 异步编程对 PHP 函数性能的影响 ...
    99+
    2024-04-11
    异步编程 php函数 并发请求 swoole
  • Go语言异步编程对性能的影响
    异步编程通过使用 goroutine 和异步 i/o 提高了 go 语言应用程序的性能:goroutine:轻量级的线程,允许并发任务。异步 i/o:不会阻塞调用线程,提高了 i/o 请...
    99+
    2024-05-08
    go语言 异步编程 apache
  • C++ 函数异常处理的性能影响如何?
    c++++ 异常处理会带来额外的开销,包括内存分配、函数调用展开和查找匹配的 catch 子句。这些开销可能导致缓存未命中,从而影响性能。要减轻这些影响,建议限制异常使用、使用 noex...
    99+
    2024-04-15
    性能 c++ 异常
  • C++ 技术中的异常处理:异常处理对程序性能的影响有哪些?
    异常处理对 c++++ 程序性能的影响包括:异常抛出和捕获会导致堆栈操作和额外的代码路径。动态内存分配可能导致内存碎片化。优化技巧包括避免过度异常、优化异常处理程序、使用 noexcep...
    99+
    2024-05-09
    程序性能 异常处理 c++
  • DB2 HADR对性能的影响
    db2trc 命令是 DB2 提供的跟踪工具。该跟踪工具记录有关操作的信息并将此信息格式化为可读格式。 需要注意的是,运行跟踪时会增加开销,所以启用跟踪工具可能会影响系统性能。 db2trace 可...
    99+
    2024-04-02
  • 浅析php一次删除多文件影响性能吗
    随着Web应用程序数量的不断增加,处理文件上传和删除的需求也越来越多。而PHP是处理Web应用程序最受欢迎的语言之一,因此在PHP中文件上传和删除是非常常见的操作。但是,当需要删除多个文件时,可能会出现性能问题。那么,PHP删除多文件会影响...
    99+
    2023-05-14
  • PHP 函数对项目性能的影响分析
    php 函数使用不当会显著影响项目性能,主要体现在内存消耗、处理时间和 i/o 操作。最佳实践包括:选择合适函数(时间和内存复杂度);避免嵌套函数(内存消耗);缓存结果(减少重复执行);...
    99+
    2024-04-13
    性能 php 重构代码 冒泡排序
  • 使用try-catch捕获异常会不会影响性能
    这篇文章主要介绍“使用try-catch捕获异常会不会影响性能”,在日常操作中,相信很多人在使用try-catch捕获异常会不会影响性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”使用try-catch捕获...
    99+
    2023-07-05
  • 浅析GitHub的收购对微软的影响
    在近几年,我们已经看到了很多大型科技公司之间的并购和收购。这个月,微软宣布将以值750亿美元收购GitHub。这是一宗颇为引人注目的交易,对未来的软件开发和云计算都可能产生深远的影响。GitHub是什么?首先,让我们来了解一下GitHub是...
    99+
    2023-10-22
  • golang内存对齐对性能的影响
    golang中内存对齐优化了内存访问,好处包括降低访问时间、提高缓存命中率、防止数据错误。通过手动调整对齐方式,如示例中的将int32字段对齐到8字节,可以提高代码处理大量数据的性能。 ...
    99+
    2024-04-23
    golang 内存对齐
  • 分析CSS回流和重绘对性能的影响
    了解CSS回流和重绘对性能的影响,需要具体代码示例 CSS回流和重绘是网页性能优化中非常重要的概念,合理使用CSS可以减少页面的回流和重绘,提高页面渲染速度。本文将介绍CSS回流和重绘的概念以及如何避免它们对性能的影响,并提供具...
    99+
    2024-01-26
    CSS 重绘 回流
  • PHP静态化对网站性能的影响分析
    PHP静态化对网站性能的影响分析 随着互联网的迅速发展,网站的性能优化变得愈发重要。其中,PHP静态化技术是一种有效的手段,可以提高网站的性能和用户体验。本文将对PHP静态化对网站性能...
    99+
    2024-03-05
    php 网站性能 静态化
  • 数据类型对 ASP 程序性能的影响分析
    ASP(Active Server Pages)是一种基于服务器端的动态网页技术,它使用VBScript或JScript等脚本语言来创建动态内容。在ASP程序中,数据类型的选择对程序的性能有着重要的影响。本文将对数据类型对ASP程序性能的影...
    99+
    2023-11-12
    并发 数据类型 编程算法
  • MySQL连接数对数据库性能的影响分析
    MySQL连接数对数据库性能的影响分析 随着互联网应用的不断发展,数据库成为了支撑应用系统重要的数据存储和管理工具。在数据库系统中,连接数是一个重要的概念,它直接关系到数据库系统的性能...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作