Web应用性能调优和跟踪、检测.ppt
第13章Web应用性能调优和跟踪检测,内容,如何开发高性能的Web应用跟踪检测缓存技术在Web应用中的异步处理Health Monitor,如何开发高性能的Web应用,页面和服务器控件处理 状态管理数据访问Web 应用程序编码实践 使用缓存,页面和服务器控件处理,避免到服务器的不必要的往返行程(客户端异步回调)使用IsPostBack 只在必要时保存服务器控件视图状态 尽量使用缓冲使用 Transfer,状态管理,当不使用会话状态时禁用它选择合适的会话状态提供程序 进程内会话状态作为 Windows 服务的进程外会话状态 SQL Server 数据库中的进程外会话状态,数据访问,SQL Server数据库中,推荐使用存储过程访问数据合理选择数据访问对象SqlDataReader:只读访问数据DataSet:提供更多类型的数据访问操作,Web 应用程序,预编译Web 应用IIS的回收进程调整辅助进程的线程数 启用网络园艺 禁用调试模式 优化配置文件,编码实践,尽量不要依赖代码中的异常 适当地使用垃圾回收器和自动内存管理 在托管代码中重写调用密集型的 COM 组件 避免单线程单元(STA)COM 组件,使用缓存,应用程序缓存页输出缓存,跟踪检测,跟踪概述页面级跟踪演示和练习:查看页面级跟踪信息应用程序级跟踪演示和练习:使用跟踪查看器查看跟踪信息ASP.NET跟踪与System.Diagnostics 跟踪的集成演示和练习:ASP.NET跟踪与System.Diagnostics 跟踪的集成,跟踪概述,为什么要使用跟踪跟踪输出信息,跟踪概述(续),跟踪输出信息,页面级跟踪:启用与排序,在页面文件(.aspx)的Page指令中设置Trace属性为true,启用页面级跟踪设置TraceMode属性指定跟踪消息出现的顺序SortByTime(默认)SortByCategory,页面级跟踪:自定义输出(编码),启用页面(default.aspx)的页面级跟踪,并在页面的默认事件(Page_Load)中自定义输出消息,protected void Page_Load(object sender,EventArgs e)Trace.Write(ASPNET_TRACE,Page_Load.);,页面级跟踪:自定义输出(显示),演示和练习:查看页面级跟踪信息,多媒体演示,应用程序级跟踪,在Web.config文件中配置应用程序级跟踪,通过对节点进行设置,即可启用或禁用应用程序级跟踪Enabled、pageOutput、RequestLimit、traceMode、localOnly、mostRecent,演示和练习:使用跟踪查看器查看跟踪信息,多媒体演示,ASP.NET跟踪与System.Diagnostics 跟踪的集成,ASP.NET跟踪与System.Diagnostics 跟踪的集成的概述要让业务类中通过调用System.Diagnostics.Trace类输出的跟踪输出信息随页面跟踪输出一起呈现,则需要完成以下任务:添加WebPageTraceListener 对象添加编译开关TRACE进行编译应用,ASP.NET跟踪与System.Diagnostics 跟踪的集成,在Web.Config文件中添加WebPageTraceListener 对象或者,在Global.asax 文件中添加WebPageTraceListener 对象,void Application_Start(Object sender,EventArgs e)WebPageTraceListener gbTraceListener=new WebPageTraceListener();System.Diagnostics.Trace.Listeners.Add(gbTraceListener);,ASP.NET跟踪与System.Diagnostics 跟踪的集成,添加编译开关TRACE进行编译应用,演示和练习:ASP.NET跟踪与System.Diagnostics 跟踪的集成,多媒体演示,缓存技术,缓存概述应用程序缓存页输出缓存,缓存概述,为什么使用缓存 应用程序可以将那些频繁访问的数据,以及那些需要大量处理时间来创建的数据存储在内存中,从而提高性能缓存机制分类介绍应用程序缓存页输出缓存,应用程序缓存,应用程序缓存的机制如何将项添加到缓存中演示和练习:向缓存中添加项读取缓存项从缓存中删除项从缓存中删除项时通知应用程序演示和练习:从缓存中删除项时通知应用程序,应用程序缓存的机制,应用程序缓存是由 System.Web.Caching.Cache 类实现的,缓存实例(Cache对象)是每个应用程序专用的,并且每个应用只有一个,通过Page类或UserControl类的Cache属性公开缓存生存期依赖于应用程序的生存期,当重新启动应用程序后,将重新创建 Cache 对象,也就是说缓存数据将被清空,如何将项添加到缓存中,添加缓存项设置缓存依赖项设置缓存过期策略设置缓存优先级,添加缓存项,通过键和值直接设置项使用 Insert 方法将项添加到缓存中,Cache“ProductCategories”=dsCategories;/dsCategories是产品分类信息,Cache.Insert(ProductCategories,dsCategories);/dsCategories是产品分类信息,设置缓存依赖项,为什么要设置依赖项依赖项分类键依赖项文件依赖项SQL 依赖项聚合依赖项自定义依赖项,设置缓存依赖项,添加缓存项的键依赖项,Cache.Insert(CacheItem2,Cache Item2,new System.Web.Caching.CacheDependency(null,new string CacheItem1);,设置缓存依赖项,添加缓存项的文件依赖项,Cache.Insert(FinanceData,Cached Item 4,new System.Web.Caching.CacheDependency(Server.MapPath(XMLFile.xml);,设置缓存依赖项,添加缓存项的SQL 依赖项使用SqlCacheDependency 对象来创建依赖于数据库表中的记录,添加步骤如下:在Web.config文件的caching节点定义缓存使用的数据库名称 使用代码依赖于该连接对应数据库的某个表的缓存项,Cache.Insert(cacheitem1,Cache Item 1,new SqlCacheDependency(AdvWorks,Product);,设置缓存依赖项,添加缓存项的聚合依赖项用System.Web.Caching.AggregateCacheDependency类添加多个依赖项,System.Web.Caching.CacheDependency dep1=new System.Web.Caching.CacheDependency(Server.MapPath(XMLFile.xml);CacheCacheItem1=Cache Item 1string keyDependencies2=CacheItem1;System.Web.Caching.CacheDependency dep2=new System.Web.Caching.CacheDependency(null,keyDependencies2);System.Web.Caching.AggregateCacheDependency aggDep=new System.Web.Caching.AggregateCacheDependency();aggDep.Add(dep1);aggDep.Add(dep2);Cache.Insert(CacheItem2,Cached Item 2,aggDep);,设置缓存过期策略,通过Cache 类自定义如何缓存项以及将它们缓存多长时间。过期类别有:绝对过期可调性过期,Cache.Insert(CacheItem1,Cached Item 1,null,System.Web.Caching.Cache.NoAbsoluteExpiration,new TimeSpan(0,30,0);,Cache.Insert(CacheItem1,Cache Item1,null,DateTime.Now.AddMinutes(30),System.Web.Caching.Cache.NoSlidingExpiration);,设置缓存的优先级,用 Add 或 Insert 方法添加项时指定一个 CacheItemPriority 枚举值,Cache.Insert(CacheItem1,Cached Item 1,null,System.Web.Caching.Cache.NoAbsoluteExpiration,System.Web.Caching.Cache.NoSlidingExpiration,System.Web.Caching.CacheItemPriority.High,null);,演示和练习:向缓存中添加项,多媒体演示,读取缓存项,通过键来检索被缓存的项,if(CacheProductCategories!=null)DataSet dsCategories=(DataSet)CacheProductCategories;,从缓存中删除项,在以下情况下,缓存自动删除缓存已满该项已过期依赖项发生更改通过代码方式删除调用Cache类的Remove()方法来删除缓存项,Cache.Remove(ProductCategories);,从缓存中删除项时通知应用程序,CacheItemRemovedCallback 委托该委托定义编写事件处理程序时使用的签名,当对从缓存中删除项进行响应时会调用此事件处理程序CacheItemRemovedReason 枚举用于指定删除缓存项的原因,演示和练习:从缓存中移除项时通知应用程序,多媒体演示,页输出缓存,页输出缓存概述使用页输出缓存设置页的可缓存性演示和 练习:缓存整个页面缓存一个页面的多个版本演示和练习:缓存一个页面的多个版本部分页缓存演示和练习:缓存后替换使用 SqlCacheDependency 类在 ASP.NET 中缓存演示和练习:使用 SqlCacheDependency 类在 ASP.NET 中缓存,页输出缓存概述,页输出缓存是指在缓存 ASP.NET 页所生成的部分响应或所有响应 提高Web应用程序的性能提高Web服务器的吞吐量,设置页的可缓存性:声明性设置,其一:在页面文件(.aspx)或用户控件文件(.ascx)中添加 OutputCache 指令来完成,并设置属性:Duration、Location和VaryByParam或VaryByControl 其二:在Web.config文件中定义缓存配置文件,在配置文件中包括 Location、duration 和 varyByParam 设置,在页面或用户控件文件中包含 OutputCache 指令,并将 CacheProfile 属性设置为 Web.config 文件中定义的缓存配置文件的名称,设置页的可缓存性:编程设置,通过System.Web.HttpCachePolicy类来设置和控制页输出缓存,Response.Cache.SetExpires(DateTime.Now.AddSeconds(60);Response.Cache.SetCacheability(HttpCacheability.Public);Response.Cache.SetValidUntilExpires(true);,演示和练习:缓存整个页面,多媒体演示,缓存一个页面的多个版本,使用VaryByParam属性来设置网页的多个版本,缓存因素有:初始请求(HTTP GET)中的查询字符串回发时传递的控制值(HTTP POST 值)随请求传递的 HTTP 标头发出请求的浏览器的主版本号页中的自定义字符串HttpCachePolicy类,演示和练习:缓存一个页面的多个版本,多媒体演示,部分页缓存,控件缓存控件缓存(也称为片段缓存),可以通过创建用户控件来包含缓存的内容,然后将用户控件标记为可缓存来缓存部分页输出 缓存后替换以声明方式使用 Substitution 控件以编程方式使用 Substitution 控件 API以隐式方式使用 AdRotator 控件,演示和练习:缓存后替换,多媒体演示,使用 SqlCacheDependency 类在 ASP.NET 中缓存,使 用 System.Web.Caching.SqlCacheDependency 类创建依赖于数据库中表或行的缓存项,演示和练习:使用 SqlCacheDependency 类在 ASP.NET 中缓存,多媒体演示,在Web应用中的异步处理,异步处理概述页面的异步处理演示和练习:创建一个异步处理的页面异步调用Web服务演示和练习:异步调用Web服务客户端异步演示和练习:在网页中实现客户端回调数据的异步访问,异步处理概述,在主应用程序线程以外的线程中执行打开大文件、连接远程计算机或数据库查询等耗时较长的任务增加整个应用的吞吐量,提高应用的响应速度,页面的异步处理:同步执行和异步执行页面流程,页面的异步处理:关键任务,设定页面Page指令中设置属性Async为true在Page_Load事件方法中调用Page类的AddOnPreRenderCompleteAsync方法,为异步页面注册异步处理的开始和结束事件处理程序委托 在服务器端申明异步请求的发起方法(BeginGetAsyncData)和结束后调用的方法(EndGetAsyncData),并在Page_Load方法中通过调用Page类的AddOnPreRenderCompleteAsync方法注册这两个方法,演示和练习:创建一个异步处理页面,多媒体演示,异步调用Web服务:Begin/End 模式,Wsdl.exe 为 Web 服务中发布的每项操作自动创建三个方法,异步调用Web服务:事件驱动的异步编程模式,基于事件处理回调的新的异步编程模型,可以简化生成多线程应用程序的过程,而不必自己实现复杂的多线程代码,演示和练习:异步调用Web服务,多媒体演示,客户端异步,需要实现的接口:实现 ICallbackEventHandler 接口实现 RaiseCallbackEvent和GetCallbackResult 接口方法需要实现的客户端三个脚本函数:实现一个调用帮助器方法的函数实现一个 clientCallBack的函数实现一个执行对服务器的实际请求的 Helper 函数,演示和练习:在网页中实现客户端回调,多媒体演示,数据库的异步访问,ADO.NET 在其 SqlCommand 类,对BeginExecuteNonQuery、BeginExecuteReader 和 BeginExecuteXmlReader 方法(与 EndExecuteNonQuery、EndExecuteReader 和 EndExecuteXmlReader 方法搭配)提供异步支持,Health Monitor,Health Monitor概述使用内置的Web事件和提供程序演示和练习:配置内置的Web事件和提供程序创建自定义事件提供程序演示和练习:创建自定义事件提供程序创建自定义事件演示和练习:创建自定义事件,HealthMonitor概述,监视应用方案监视应用程序的性能以确保它正常运行快速诊断出现故障的应用程序或系统评估给定应用程序的生命周期期间的重要事件在Web.config文件中配置HealthMonitor节完成监视设置配置并启用要监视的 Web 事件配置并启用用于侦听和使用各种 Web 事件的事件提供程序,使用内置的Web事件和提供程序,向应用程序配置文件的healthMonitoring节中的eventMappings元素添加需要监视的内置Web 事件 将事件提供程序(侦听器)的类型分配给 providers 集合元素中的事件提供程序类 添加提供程序的事件的关联项,演示和练习:配置内置Web事件和提供程序,多媒体演示,创建自定义事件提供程序,创建一个从 WebEventProvider 或 BufferedWebEventProvider 类继承的类来实现自定义事件提供程序,在healthMonitoring 节完成以下配置任务在providers 元素添加处理事件的自定义提供程序在 eventMappings 元素添加内置或自定义 ASP.NET Web 类在 rules 元素添加一个定义事件与提供程序之间的关联的项 将包含自定义提供程序实现的程序集放置在应用程序的 Bin 子目录中,演示和练习:创建自定义事件提供程序,多媒体演示,创建自定义事件,创建自定义事件的关键任务:生成一个触发自定义运行状况监视事件的 HTTP 模块 生成一个派生于WebRequestEvent类的自定义Web数据类配置应用程序使用标准 EventLogWebEventProvider 来记录事件信息,演示和练习:创建自定义事件,多媒体演示,回顾,如何开发高性能的Web应用跟踪检测缓存技术在Web应用中的异步处理Health Monitor,实验,参照实验手册,并在教师指导下完成实验报告。,习题,详见本书第13章后习题部分,请学生独立完成。,