文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

.NET应用程序七种常见的性能问题及其解决方案

2024-12-02 04:46

关注

随着.NET应用范围越来越广泛,对于大多数应用程序所有者和开发人员来说,确保.NET应用程序的优良性能是最重要的需求。

.NET应用程序运行缓慢的原因可能有很多。这些包括不正确的内存大小调整,GC暂停,代码级错误,异常的过多日志记录,同步块的高使用率,IIS服务器瓶颈等等。

在此博客中,我们将研究.NET应用程序中的一些常见性能问题,并提供解决和解决这些问题的技巧。

1.未处理的异常与记录过多异常日志

.NET异常不是一件坏事,只有错误的用法却是坏事。这就是大多数开发人员所相信的,如果对异常进行了适当的处理,即抛出,捕获和处理(并且不忽略),则会带来稳定的性能。

然而,就像太多的厨师会宠坏了汤一般,太多未处理的异常会导致代码效率低下并影响应用程序性能[1]。

尤其是隐藏的异常更糟,这种隐藏异常就像雷区,一旦未能检查这些异常,它们会影响网页加载时间。

.NET的另一个问题是过多地记录了异常。日志记录可能是您的调试工具库中的一个好工具,它可以识别在处理应用程序时记录的异常。

但是,当设置日志记录来捕获应用程序体系结构每一层的异常时,最终可能会在Web,服务和数据层上记录相同的异常。这可能会增加应用程序代码的负担,并增加响应时间。在生产环境中,只需要记录致命事件和错误就需要小心。

记录所有信息,包括参考消息,调试和警告,很容易使您的生产日志文件file臃肿,进而影响代码处理。

有用的疑难解答提示:

2.过度使用线程同步和Lock

.NET Framework提供了许多线程同步选项,例如进程间互斥,读取器/写入器锁等。

有时,.NET开发人员将以这样的方式编写代码:在给定的条件下,只有一个线程可以得到服务。

时间以及其他要处理的并行线程将不得不在队列中等待。例如,结帐应用程序根据其业务逻辑应一次处理一个请求。同步和锁定有助于序列化传入线程以执行。通过创建同步的代码块并在特定对象上施加锁定,需要传入线程等待直到同步对象上的锁可用为止。尽管此策略在某些情况下会有所帮助,但不应过度使用。

有用的疑难解答提示:

3.应用程序挂起

有时特定的URL缓慢时,这是一回事。但是,当IIS网站刚刚挂起并且所有或大多数网页需要永久加载时,它不会变得更糟。通常,当应用程序过载或死锁时,可能会挂起。.NET应用程序通常会遇到两种类型的应用程序挂起方案。

硬挂(IIS问题):这通常发生在请求处理管道的开始–在请求排队的地方。由于应用程序死锁,所有可用线程都可能被阻塞,导致随后的传入请求最终在等待服务的队列中结束。当活动请求数超过IIS服务器上配置的并发限制时,也会发生这种情况。此类挂起将表现为请求超时并收到503 Service Unavailable错误。硬性影响所有URL和整个Web应用程序本身。

有用的疑难解答提示:

软挂(ASP.NET问题):这通常是由于特定段中的应用程序代码错误而造成的,仅影响几个URL而不影响整个网站。通常,由ASP.NET控制器或页面引起的挂起发生在

ExecuteRequestHandler

阶段。为了确认这一点,您可能想调试一下调试器,以确切了解请求被卡在哪里。检查模块名称,阶段名称和URL。URL将指示导致挂起的控制器/页面。

有用的疑难解答提示:

4.频繁垃圾回收暂停

当托管堆上分配的对象使用的内存超过应用程序开发人员配置的可接受阈值时,.NET CLR中的垃圾回收(GC)会初始化。这是GC.Collect方法跳转到动作并回收死对象占用的内存的时候。CLR中的GC通常发生在存储短期对象的第0代堆中。当GC发生在包含长期对象的第二代堆中时,它称为Full GC。每次发生GC都会在CLR上增加大量CPU负载,并减慢应用程序的处理速度。因此,如果GC暂停时间更长且更频繁,则应用程序将趋于放缓。

有用的疑难解答提示:

5.IIS服务器瓶颈

Microsoft IIS Server是.NET Framework的关键部分。IIS是Web服务器,它承载构建于.NET上的Web应用程序或网站,并运行W3WP进程,该进程负责响应传入的请求。IIS还集成了公共语言运行时(CLR),该运行时负责为线程处理分配资源。由于IIS具有各种活动部分,因此IIS中的瓶颈可能会对.NET应用程序性能产生直接的负面影响。

常见的IIS服务器问题:

有用的疑难解答提示:

6.数据库慢查询

并非总是会影响应用程序性能的.NET代码问题。运行缓慢的查询通常是常见的原因。但是通常是.NET应用程序开发人员因应用程序性能下降[6]而受到指责。

这样做的原因是,SQL性能如何影响.NET应用程序处理没有上下文可见性。ADO.NET和ODP.NET连接问题可能是查询处理缓慢的原因之一,但常见原因是查询的格式不正确。执行计划不正确,索引缺失,架构设计不当,缓冲池较小,联接缺失,缓存不正确,连接未正确进行池化等也是导致数据库查询处理受到影响的原因。

虽然DBA负责数据库性能和查询创建,但.NET应用程序所有者需要在应用程序处理期间跟踪查询级别的问题。这将有助于区分代码级问题和数据库问题,并且.NET开发人员不必花时间寻找代码中的问题。

有用的疑难解答提示:

温馨提示:除了数据库调用速度慢之外,由于外部调用[8](例如HTTP,Web Service,WCF)也可能导致速度慢[9]。

7.基础设施故障:尽管不是.NET框架的问题,但仍是一个.NET问题!

.NET Framework不是独立的层。使用.NET Framework的应用程序将与基础架构(例如任何虚拟服务器,容器或云基础架构)有很多依赖性。然后,可能会有后端存储设备。尽管这些不是直接的.NET问题,但是这些基础结构组件中的任何一个问题都可能同样影响.NET性能。

就像我们看到IIS服务器和数据库可能遇到瓶颈一样,VM可能会耗尽资源,SAN阵列可能会遇到无法处理的高IOPS,或者如果.NET应用程序托管在Azure上,那么可能会有一个应用程序服务运行不正常。

在大多数应用程序环境中,与网络相关的投诉都位居榜首。无论是网络问题还是应用程序问题之间总是存在责备游戏。网络拥塞,丢包或设备故障可能会影响应用程序的性能和连接性。

有用的疑难解答提示:

.NET应用程序环境的总体性能保证要求应用程序与支持基础结构之间的依存关系具有相关的可见性。确保实施融合的应用程序和基础结构监视策略以捕获基础结构问题。

当您专注于捕获和解决所有这些问题时,请务必记住,编写干净而高效的代码可以解决.NET方面的许多问题。编写良好的代码,保持系统和基础架构的健康,并实施必要的工具以监控自动化。这将帮助您提供高性能的.NET应用程序和数字体验。

References

[1] 应用程序性能: https://www.eginnovations.com/blog/what-is-application-performance-monitoring/

[2] 代码分析工具: https://www.eginnovations.com/microsoft-net-monitoring

[3] 事务跟踪工具: https://www.eginnovations.com/microsoft-net-monitoring

[4] 监视IIS性能: https://www.eginnovations.com/iis-monitoring

[5] 所有方面,: https://www.eginnovations.com/iis-monitoring

[6] 应用程序性能下降: https://www.eginnovations.com/webinar/my-application-is-slow-troubleshooting-prevention/

[7] 数据库监视工具: https://www.eginnovations.com/database-monitoring

[8] 速度慢之外,由于外部调用: https://www.eginnovations.com/microsoft-net-monitoring#supported

[9] 速度慢: https://www.eginnovations.com/microsoft-net-monitoring#supported

来源:DotNET技术圈内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯