首页 > 编程 > .NET > 正文

ASP.NET性能优化

2024-07-10 13:04:25
字体:
来源:转载
供稿:网友

衡量web性能的方法



l         衡量web服务器性能的唯一方式是对服务器进行压力测试(stress testing)



1.        自动压力测试工具是衡量的唯一方式



2.        浏览器的点击刷新并不能作为痕量手段……




 


l         收集多个典型应用场景方案:



1.        在应用车工女婿执行过程中模拟典型事物处理的过程



2.        痕量常用的单个页面的性能(热点)



3.        确定个场景及个页面的使用率




 


l         通过测试找出系统的新能指标:



1.        服务器的处理能力



2.        确定适合可接受ttfb/ttlb响应时间范围的可支持的最大客户端负载(并发用户)




 



 


性能测试工具



l         微软web application stress tool



1.        可免费下载(10mb),适用于xp、2000、2003



2.        http://www.microsoft.com/technet/treeview/default.aspx?url=/technet/itsolutions/intranet/downloads/webstres.asp




 


l         微软应用程序中心测试工具(microsoft application center test)



1.        作为vs.net enterprise 的一部分提供给客户



2.        启用更丰富的脚本及报告




 



 


主要的性能测试观测项perfmon counters



l         processor,cpu % utilization



low numbers = blocking or lock contention




 


l         asp.net,requests in application queue



出现线型增长时表示服务器已达满负荷




 


l         asp.net,applications,requests/sec



动态吞吐量(应保持一致、无大的波动)




 


l         asp.net,applications,errors total



预示着功能级错误(应为0)




 


l         asp.net app/worker process restarts



表示有严重错误编程级错误(应为0)



压力测试环境的注意事项



l         在独立与web服务器及应用服务器的机器上运行压力测试工具



1.        否则工具将超出服务器cpu的最大范围



2.        对于繁重的负载使用多个客户端机器




 


l         对测试进行配置,以模拟不同的客户端带宽级别



1.        特定用于衡量56k拨号




 


l         消除应用之外的任何瓶刭:



1.        网络、客户端等




 



 


逻辑设计



l         建议:采用3层逻辑模型



1.        pages and user controls ui



2.        business and data access classes in /bin dir



3.        data withwin a sql database via sprocs




 


l         设计系统时要考虑到scale-out的情形



1.        不要假设客户端的请求




 


l         永远会返回到同一机器




 



 


使用最佳的data provider



l         ado.net 可支持多个provider:



1.        system.data.sqlclient



2.        system.data.oracleclient



3.        system.data.oledb



4.        system.data.odbc




 


l         所有provider的编程模型相同



1.        但是性能方面存在明显差异




 


l         建议:使用最佳



1.        在访问msde/sql 是始终使用sqlclient



2.        在访问oracle时始终使用oracleclient




 



 



 



 


datareader vs.datasets



l         datareader



1.        对查询的结果提供了单向读取的操作



2.        轻量快速-但在reader关闭之前数据库始终处于连接状态




 


l         dataset



1.        非连接的数据访问方式



2.        内部使用datareader用户获取数据



3.        在完成dataset的获取后会自动关闭datareader




 


l         which is better?



1.        依赖于你的应用



2.        原则上在middle_tier设计到大量数据处理或进行离线的数据访问时建议使用dataset




 



 


连接池



l         ado.net拥有内置的连接迟



1.        自动缓寸/重新使用连接



2.        不必为此编写任何代码




 


l         代码建议



1.        “在后期打开代码中的连接,然后在早期将其关闭”



2.        切无长时间保持连接状态 – 切无尝试构建你自己的“智能”连接池逻辑



3.        完成后应立即显示地关闭数据库连接,以将其返回致池中




 


l         优化提示:



1.        不同的连接字符串可以生成多个不同的连接池



2.        在web.config中存储单个连接字符串



3.        使用configurationsettings.appsettings以在运行时采用编程形式对其进行访问



4.        观察”.net clr数据“性能计数器,以变对由adp.net维护的连接池数量保持




 



 


使用存储过程



l         建议将sproc用于数据存取



1.        通过dba进行更轻松的性能调试



2.        通过使用数据库事务处理避免出现分布事务成本



3.        有助于防止sql注入攻击



4.        有助与消除应用与数据库反复调用的成本




 



 



 


服务器控件



l         对性能优化而言有两点需要注意:



1.        viewstate



2.        number of controls generated(especially for lists)




 



 


viewstate管理



l         asp.net controls能够维护页面control元素的状态:



1.        状态以”viewstate” hidden field进行传递




 


l         负面影响:



1.        增加网络负荷(both on render and postback)



2.        额外的服务器性能消耗(serialize values to/from viewstate)




 


l         viewstate灵活性:



1.        页面级(can disable viewstate entirely for a page)



2.        控件级(can disable viewstate usage on a per control basis)




 


l         建议



1.        认真审核该功能的使用



2.        若不使用postback功能,在页面级屏蔽viewstate



3.        postback时没次都重新生成控件,请对控件级的viewstate屏蔽



4.        使用<%@ page trace=”true”%>跟踪viewstate的大小



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表