随着.NET应用范围越来越广泛,对于大多数应用程序所有者和开发人员来说,确保.NET应用程序的优良性能是最重要的需求。
.NET应用程序运行缓慢的原因可能有很多。这些包括不正确的内存大小调整,GC暂停,代码级错误,异常的过多日志记录,同步块的高使用率,IIS服务器瓶颈等等。
在此博客中,我们将研究.NET应用程序中的一些常见性能问题,并提供解决和解决这些问题的技巧。
.NET异常不是一件坏事,只有错误的用法却是坏事。这就是大多数开发人员所相信的,如果对异常进行了适当的处理,即抛出,捕获和处理(并且不忽略),则会带来稳定的性能。
然而,就像太多的厨师会宠坏了汤一般,太多未处理的异常会导致代码效率低下并影响应用程序性能[1]。
尤其是隐藏的异常更糟,这种隐藏异常就像雷区,一旦未能检查这些异常,它们会影响网页加载时间。
.NET的另一个问题是过多地记录了异常。日志记录可能是您的调试工具库中的一个好工具,它可以识别在处理应用程序时记录的异常。
但是,当设置日志记录来捕获应用程序体系结构每一层的异常时,最终可能会在Web,服务和数据层上记录相同的异常。这可能会增加应用程序代码的负担,并增加响应时间。在生产环境中,只需要记录致命事件和错误就需要小心。
记录所有信息,包括参考消息,调试和警告,很容易使您的生产日志文件file臃肿,进而影响代码处理。
有用的疑难解答提示:
.NET Framework提供了许多线程同步选项,例如进程间互斥,读取器/写入器锁等。
有时,.NET开发人员将以这样的方式编写代码:在给定的条件下,只有一个线程可以得到服务。
时间以及其他要处理的并行线程将不得不在队列中等待。例如,结帐应用程序根据其业务逻辑应一次处理一个请求。同步和锁定有助于序列化传入线程以执行。通过创建同步的代码块并在特定对象上施加锁定,需要传入线程等待直到同步对象上的锁可用为止。尽管此策略在某些情况下会有所帮助,但不应过度使用。
有用的疑难解答提示:
有时特定的URL缓慢时,这是一回事。但是,当IIS网站刚刚挂起并且所有或大多数网页需要永久加载时,它不会变得更糟。通常,当应用程序过载或死锁时,可能会挂起。.NET应用程序通常会遇到两种类型的应用程序挂起方案。
硬挂(IIS问题):这通常发生在请求处理管道的开始–在请求排队的地方。由于应用程序死锁,所有可用线程都可能被阻塞,导致随后的传入请求最终在等待服务的队列中结束。当活动请求数超过IIS服务器上配置的并发限制时,也会发生这种情况。此类挂起将表现为请求超时并收到503 Service Unavailable错误。硬性影响所有URL和整个Web应用程序本身。
软挂(ASP.NET问题):这通常是由于特定段中的应用程序代码错误而造成的,仅影响几个URL而不影响整个网站。通常,由ASP.NET控制器或页面引起的挂起发生在
阶段。为了确认这一点,您可能想调试一下调试器,以确切了解请求被卡在哪里。检查模块名称,阶段名称和URL。URL将指示导致挂起的控制器/页面。
当托管堆上分配的对象使用的内存超过应用程序开发人员配置的可接受阈值时,.NET CLR中的垃圾回收(GC)会初始化。这是GC.Collect方法跳转到动作并回收死对象占用的内存的时候。CLR中的GC通常发生在存储短期对象的第0代堆中。当GC发生在包含长期对象的第二代堆中时,它称为Full GC。每次发生GC都会在CLR上增加大量CPU负载,并减慢应用程序的处理速度。因此,如果GC暂停时间更长且更频繁,则应用程序将趋于放缓。
Microsoft IIS Server是.NET Framework的关键部分。IIS是Web服务器,它承载构建于.NET上的Web应用程序或网站,并运行W3WP进程,该进程负责响应传入的请求。IIS还集成了公共语言运行时(CLR),该运行时负责为线程处理分配资源。由于IIS具有各种活动部分,因此IIS中的瓶颈可能会对.NET应用程序性能产生直接的负面影响。
常见的IIS服务器问题:
并非总是会影响应用程序性能的.NET代码问题。运行缓慢的查询通常是常见的原因。但是通常是.NET应用程序开发人员因应用程序性能下降[6]而受到指责。
这样做的原因是,SQL性能如何影响.NET应用程序处理没有上下文可见性。ADO.NET和ODP.NET连接问题可能是查询处理缓慢的原因之一,但常见原因是查询的格式不正确。执行计划不正确,索引缺失,架构设计不当,缓冲池较小,联接缺失,缓存不正确,连接未正确进行池化等也是导致数据库查询处理受到影响的原因。
虽然DBA负责数据库性能和查询创建,但.NET应用程序所有者需要在应用程序处理期间跟踪查询级别的问题。这将有助于区分代码级问题和数据库问题,并且.NET开发人员不必花时间寻找代码中的问题。
温馨提示:除了数据库调用速度慢之外,由于外部调用[8](例如HTTP,Web Service,WCF)也可能导致速度慢[9]。
.NET Framework不是独立的层。使用.NET Framework的应用程序将与基础架构(例如任何虚拟服务器,容器或云基础架构)有很多依赖性。然后,可能会有后端存储设备。尽管这些不是直接的.NET问题,但是这些基础结构组件中的任何一个问题都可能同样影响.NET性能。
就像我们看到IIS服务器和数据库可能遇到瓶颈一样,VM可能会耗尽资源,SAN阵列可能会遇到无法处理的高IOPS,或者如果.NET应用程序托管在Azure上,那么可能会有一个应用程序服务运行不正常。
在大多数应用程序环境中,与网络相关的投诉都位居榜首。无论是网络问题还是应用程序问题之间总是存在责备游戏。网络拥塞,丢包或设备故障可能会影响应用程序的性能和连接性。
.NET应用程序环境的总体性能保证要求应用程序与支持基础结构之间的依存关系具有相关的可见性。确保实施融合的应用程序和基础结构监视策略以捕获基础结构问题。
当您专注于捕获和解决所有这些问题时,请务必记住,编写干净而高效的代码可以解决.NET方面的许多问题。编写良好的代码,保持系统和基础架构的健康,并实施必要的工具以监控自动化。这将帮助您提供高性能的.NET应用程序和数字体验。
[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
分享名称:.NET应用程序七种常见的性能问题及其解决方案
本文地址:http://www.csdahua.cn/qtweb/news26/344626.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网