1.如何开发高性能的Web应用系统2.跟踪与调试3.ASP.NET的缓存对象Cache4.ASP.NET的输出缓存技术1.页面设计2.数据访问3.状态管理4.应用程序设计与配置①必须进行输入验证②慎用自动回发功能,应尽量统一提交③禁用视图状态(节省服务器的处理时间并减少页的大小)④动态添加控件时要灵活使用Page_Init或Page_Load事件函数,以避免对往返行程执行不必要的处理必须进行输入验证,以防止大量的垃圾数据信息最终传送给数据库服务器处理在用SQLServer存储数据时,建议使用存储过程访问数据。如果页面只是从数据库中读取数据,应该尽量使用SqlDataReader,而不是DataSet。当不需要会话状态时,可以禁用会话状态功能。选择适当的会话状态提供程序◦进程内会话状态(Session对象来存储用户会话数据,是速度最快的解决方案)◦作为Windows服务的进程外会话状态◦SQLServer数据库中的进程外会话状态。尽可能地避免异常的发生,或者尽可能地捕获有可能发生的异常。预编译Web应用程序。使用CLR的垃圾回收器自动回收内存。优化配置文件,保证应用程序的需要即可。IIS可能因内存泄漏和设计缺陷而导致性能下降,当停止进程或重新加载页面时重新获取数据也会导致性能下降,因此应当平衡定期回收的需求。通过优化服务器配置,避免存在大量等待处理的请求或线程,确保服务器的吞吐量。Trace对象概念◦TraceContent类的实例,通过Page.Trace属性公开◦功能:可跟踪运行过程,既能够在Web页中显示信息,也能够将信息存储在内存中。启用页面级跟踪◦方法:%@PageLanguage=c#Trace=true%启用应用程序级跟踪◦在web.config配置文件中添加:traceenabled=“…”pageOutput=“…”localOnly=“…”/跟踪查看器:http://服务器名/项目名/trace.axd举例:例9-1和9-29页设置Trace=TrueTrace=False未设置Trace属性应用程序设置Trace=True或Trace=FalseTrace=True或Trace=FalseTrace=True结果显示跟踪结果不显示跟踪结果显示跟踪结果Debug对象概念◦封装于System.Diagnostics中,使用时要注意导入。◦只在调试模式下运行,调试信息只在调试器的输出窗口中显示。启用调试模式◦方法:%@PageLanguage=c#Debug=true%或者在配置文件中添加compilationdebug=true/在VS中调试Web窗体◦设置断点→设置启始页→开始调试1.Cache对象概述2.Cache对象的使用方法3.缓存策略的设置Cache的作用◦Web窗体在首次请求数据项时,将数据缓存在内容,在以后的请求中可直接使用。◦通过HttpContext或Page对象的Cache属性引用Cache特点◦每一个Web应用程序只有一个Cache对象,并且不能被其他Web应用程序访问;◦Web应用程序重启时将创建Cache对象;◦Cache对象使用键/值词典结构存储和检索对象,可替代Application对象使用Cache的优点(1)比每次请求时创建新对象速度快(2)支持自动锁定管理(3)自动管理缓存资源(4)支持回调函数(当移除项时,执行回调函数)(5)支持基于依赖项的移除存储数据(1)隐式写入:Cache[键名]=值;例如:Cache[visitor]=VipUser;Cache[visitedTime]=DateTime.Now;(2)显式写入:Cache.Insert(键名,值);例如:Cache.Insert(visitor,VipUser);Cache.Insert(visitedTime,DateTime.Now);检索数据格式:Cache[键名]例如:DateTimetime=(DateTime)Cache[visitedTime];注意:该对象在Web窗体中通过Page.Cache即可访问,而在Global.asax中必须通过HttpContext.Current.Cache访问。例9-3publicvoidInsert(stringkey,//指定缓存项的键名Objectvalue,//指定缓存项的值CacheDependencydependencies,//设置缓存依赖项DateTimeabsoluteExpiration,//设置绝对过期时间TimeSpanslidingExpiration,//设置相对过期时间CacheItemPrioritypriority,//设置优先级CacheItemRemovedCallbackonRemoveCallback//设置回调函数)添加键依赖项◦例如:Cache.Insert(A,第1个缓存项);◦Cache.Insert(“B”,“第2个缓存项”,newCacheDependency(null,newstring[]{“A”}));newCacheDependency(string[]filenames,string[]cachekeys)添加文件依赖项◦例如:Cache.Insert(link,coll,newCacheDependency(Server.MapPath(link.xml)));添加SQL依赖项◦在配置文件中,添加caching元素节点,以定义缓存项所要使用的数据库名称:cachingsqlCacheDependencydatabasesaddname=数据库名connectionStringName=...//databases/sqlCacheDependency/caching◦创建依赖于数据库表的缓存项。格式如下:Cache.Insert(键名,数据,newSqlCacheDependency(数据库名,表名));添加聚合依赖:聚合依赖是指一个缓存项与多个其它缓存项、文件或数据库存在依赖关系。方法1:通过CacheDependency类来添加。格式:newCacheDependency(string[]filenames,string[]cachekeys)方法2:通过AggregateCacheDependency类来添加。首先创建聚合依赖对象,然后调用其Add()方法向它添加若干个封装了依赖项的聚合依赖对象,最后传递给Cache.Insert方法。例9-4(1)绝对过期时间:使用DateTime来指定例:Cache.Insert(“key”,value,null,DateTime.Now.AddMinutes(30),Cache.NoSlidingExpiration);(2)相对过期时间:使用TimeSpan来设置例:Cache.Insert(key,value,null,Cache.NoAbsoluteExpiration,newTimeSpan(0,15,0);缓存项的优先级由枚举型CacheItemPriority定义,共6种优先级,按从低到高分别是Low、BelowNormal、Normal、AboveNormal、High、NotRemovable。例如:Cache.Insert(key,value,null,Cache.NoAbsoluteExpiration,Cache.NoSlidingExpiration,CacheItemPriority.High,null);ASP.NET使用CacheItemRemovedCallback委托来绑定回调处理函数,当删除缓存项时系统会自动调用该回调函数。此外枚举型CacheItemRemovedReason定义了删除缓存项可能的原因。CacheItemRemovedCallback委托的定义如下:publicdelegatevoidCacheItemRemovedCallback(stringkey,Objectvalue,CacheItemRemovedReasonreason)例9-51、输出缓存概述2、输出缓存的使用方法输出缓存的工作机制◦ASP.NET提供输出缓存功能,允许在服务器内存中存储整个WEB窗体或用户控件。◦在首次被请求时,先将整个页面或部分页面存储在内存中,供以后的请求直接使用。直到缓存过期或页面更新输出缓存的利与弊◦好处:避免重建页面,使页面请求响应时间最少◦不足:可能消耗大量的内存资源输出缓存的种类◦页面缓存:缓存整个页面◦片段缓存:只缓存页面中的用户控件◦XMLWebService缓存:缓存函数的运行结果24①使用@OutPutCache指令声明②编程设置输出缓存③设置片断缓存④设置SQL缓存依赖%@OutputCacheDuration=#ofsecondsLocation=Any|Client|Downstream|Server|NoneShared=True|FalseVaryByControl=controlnameVaryByParam=parameternameSqlDependency=database/tablenamepair%例9-6HttpCachePolicy类◦该类通过Response.Cache属性公开,可实现编程设置输出缓存策略。HttpCachePolicy类的常用属性和方法:◦VaryByParams属性:获取影响缓存的参数的列表。◦AddValidationCallback方法:用来添加当前响应的回调函数,以确保输出缓存的资源的有效性。◦SetExpires方法:为缓出缓存设置绝对过期日期和时间。◦SetSlidingExpiration方法:为缓出缓存设置相对过期时间。◦SetVaryByCustom方法:指定一个自定义文本字符串,以此区别缓存的输出响应。◦SetValidUntilExpires方法:设置输出缓存有效直到过期。例9-7步骤:◦S1:创建用户控件◦S2:定义用户控件的公共属性,以公开其数据信息◦S3:设计aspx页,以引用用户控件并设置片断缓存策略,同时测试片断缓存通过@OutputCache指令的SqlDependency属性即可设置输出缓存所依赖的数据库表。例如:%@OutputCacheDuration=30VaryByParam=“none”SqlDependency=“MyDatabase:Product%其中,“MyDataBase”是在配置文件Web.config的sqlCacheDependency元素节点中设置的数据库的名字。30Cache:用来存储Web应用程序中页面之间的共享信息页输出缓存:存储整个页面或页面片段的副本,这些副本对请求同一页面的其他用户是可用的