ASP.NET错误处理和 程序优化
讲师:邵志东
课前准备
? Dot Net FrameWork ? VS.NET 2002/2003 ? C#/
VB.NET ? Level 200
议程
? ? ? ? ? 错误类型以及处理方式 提高数据访问性能 服务器控件的使用 缓存的使用 提高性能的实用技巧
错误类型以及处理方式
1、错误的类型 ? 分析程序错误
– – 语法错误:语法有
问题 逻辑错误:除0错误、类型不匹配、不正确输出、 使用不正确的对象、处理无效的数据
?
? ?
编译错误:使用了不能被语言编译器识别, 但ASP.NET能识别的关键字或语句时发生的 错误 运行时错误 配置错误:Web.config文件出错
2、错误的处理
? 使用验证控件 ? 编程处理
– 校验语句 – try...catch...finally – Page_Error – Application_Error
? 在应用程序配置文件中,为应用程序执行 的声明性错误处理
DEMO1
校验(checked)和非校验 (unchecked)语句
异常类:Exception
? 所有异常对象的基类 ? 属性:
– HelpLink:到一个文件的链接,该文件包含关于错误 的更详细的信息 – InnerException:一个内部异常的引用。如果一个异 常被捕获,并被传递给另外一个异常处理
程序,则 该属性返回到第一个异常的引用 – Message:描述异常的消息 – Source:一个字符串,其中包含引起错误的对象的 名称 – StackTrace:返回一个指出错误原因的栈跟踪 – TargeSite:引起错误的方法
Page对象的Error事件
? 使用模板
void Page_Error(object sender,EventArgse) { Response.Write(“发生错 误:”+Server.GetLastError().ToString()); Server.ClearError(); }
Appliation对象的Error事件
? 应用程序中任何页面抛出异常都会调用 ? 在global.asax中 ? 形式为: void Application_Error(object sender,EventArgs e) { ... }
DEMO2
编写到windows错误日志 把错误发送邮件到管理员
利用配置文件处理错误
? ASP.NET同以前的ASP一样,当服务器上发生了一个运 行时间或编译时间错误时,就会生成一个html 错误页面。 但是与ASP不同,ASP.NET格外关注的是:要确保在默 认状态下,不会因为这个错误的发生而泄露“安全”信息。 ? <system.web>
</system.web>
议程
? ? ? ? ? 错误类型以及处理方式 提高数据访问性能 服务器控件的使用 缓存的使用 提高性能的实用技巧
性能引言
? 是
– XmlDocumentLoadXML(stringstrFileID) // 加 载XML – boolCheckIDExisit(stringstrFileID,stringstrID) //判断节点是否存在
? 还是
– boolCheckIDExisitByXml(string strXml,string strID) //判断节点是否存在 – 或 boolCheckIDExisitByXml(XmlDocument objXml,stringstrID) // 判断节点是否存在
逻辑设计
? 建议: 采用 3层 逻辑模型
– P
ages (.aspx) and User Controls (.ascx) UI – Business and Data Access classes in \bin dir – Data within a SQL Database via SPROCs
使用最佳的Data Provider
? ADO.NET 可支持多个Provider:
– System.Data.SqlClient – System.Data.OracleClient – System.Data.OleDb – System.Data.Odbc
? 所有Provider的编程模型相同
– 但是性能方面存在明显差异
? 建议:使用最佳Provider
– 在访问 MSDE/SQL 时始终使用 SqlClient – 在访问 Oracle 时始终使用 OracleClient
Data Provider测试
? 方案:
– 从 SQL Northwinds 数据库中抽取 50 行 – <%= %> html 表格格式化技术
? 衡量的三种技术(不同的Data Provider ):
– 传统 ASP/ADO – ASP.NET w/ System.Data.OleDb 提供商 – ASP.NET w/ System.Data.SqlClient 提供商
数据性能测试
900 800 700 请 求 /秒 ( 4P 服务 ) 600 500 400 300 200 100 0 传统 ASP/ ADO 带 OLEDB 的 ASP.NET 带 SQL 的 ASP.NET
DataReaders 和 DataSets
? DataReader
– 对查询的结果提供了单向读取的操作 – 轻量快速 – 但在Reader为关闭之前始终处于连接状态
? DataSet
– 非链接的数据访问方式 – 内部使用DataReader用于获取数据 – 在完成DataSet的获取后会自