动关闭DataReader
? 如何选择?
– 依赖于您的应用
– 般情况下,读取大量数据,对返回数据不做大量处理用 SqlDataReader.对返回数据大量处理用datset比较合
DataReader ?DataSet
通常情况下 DataReader比 DataSet快 16%!!
ExecuteNonQuery和ExecuteScalar
? ExecuteNonQuery
– 对数据的更新不需要返回结果集 – 由于不返回结果集可省掉网络数据传输。它仅仅返回受影响 的行数。如果只需更新数据用ExecuteNonQuery性能的开销 比较小。
? ExecuteScalar
– 它只返回结果集中第一行的第一列。使用 ExecuteScalar 方 法从数据库中检索单个值(例如id号)。 – 与使用 ExecuteReader 方法, 返回的数据执行生成单个值所 需的操作相比,此操作需要的代码较少
? 如何选择?
– 只需更新数据用ExecuteNonQuery.单个值的
查询使用 ExecuteScalar
数据的绑定DataBinder
? 一般的绑定方法<%# DataBinder.Eval(Container.DataItem, “字段名”) %>用DataBinder.eval 绑定不必关心数据来源 (Dataread或dataset)。不必关心数据的类型eval 会把这个数据对象转换为一个字符串。在底层绑 定做了很多
工作,使用了反射性能。正因为使用 方便了,但却影响了数据性能。 ? 直接转换成DataRowView的话,将会给性能带来 很大提升 : ? <@% ((DataRowView)Container.DataItem)["字 段名"] %>
连接池
? ADO.
NET 拥有内置的连接池
– 自动缓存/重新使用连接 – 不必为此编写任何代码
? 代码建议:
–“ 在后期打开代码中的连接,然后在早期将其 关闭” – 切勿长时间保持连接状态 – 完成后应立即显示地关闭数据库连
接,以将其返 回至池中
连接池
? 优化提示:
– 不同的连接字符串可以生成多个不同的连接池 – 在 Web.Config 中存储单个连接字符串 – 使用 ConfigurationSettings.AppSettings,以在运 行时采用编程形式对其进行访问
? 始终应明确关闭数据连接,避免连接泄漏
– 否则连接将在下一次垃圾收集之前保持打开状态 – 泄露连接会显著降低性能
使用存储过程
? 建议将 SPROC 用于数据存取
– – – – 通过 DBA 进行更轻松的性能调试 通过使用数据库事务处理避免出现分布事务成本 有助于防止 SQL 注入攻击 有助于消除应用与数据库反复调用的成本
? 有趣的提示:
– 可以通过企业管理器来关闭动态 SQL 支持,以强制使用 SPROC
DEMO3
使用连接池优化程序
议程
? ? ? ? ? 错误类型以及处理方式 提高数据访问性能 服务器控件的使用 缓存的使用 提高性能的实用技巧
服务器控件
? 提供了清晰的编程模型(重用,简洁,宜用)
– 创建 ASP.NET 页面所倡导的模式
? 对性能优化而言有两点需要注意:
– ViewState – 控件数量
ViewState 管理
? ASP.NET controls 能够维护页面Control元素的状态
– 状态以“viewstate” hidden field进行传递
? 负面影响:
– 增加
网络负荷(both on render and postback) – 额外的服务器性能消耗 (serialize values to/from viewstate)
? Viewstate灵活性:
– 页面级(Can disable viewstateentirely for a page ) – 控件级(Can disable viewstateusage on a per control basis )
? 建议:
– – – – 认真审核该功能的使用 若不使用PostBack功能,请在页面级屏蔽ViewState PostBack时每次都重新生成控件,请对控件级的ViewState屏蔽 使用 <%@ Page Trace=“true” %>跟踪ViewState的大小
有关ViewState管理提示
? 如果您希望更明确的限制 viewstate 的使用,可将 ASP.NET 配置为默认情况下处于关闭状态 ? Machine.config:
web> ? 之后需要 viewstate 的页将在页面指令中手动对其进 行设置:
– <%@ Page EnableViewState=“true” %>
生成的控件数量
? 页面上的每个服务器控件的生成都存在固定的 成本 – 每个控件的成本通常可以忽略不计 ? 复合控件有时可以屏蔽使用的控件数量,尽管 会出现以下情况 – 聚集成本有时可以累加 –