1 / 13

ASP.Net 性能优化

ASP.Net 性能优化. ChengDu MIS Jin.J.Qin. 议 程. 1. 会话状态的恰当选择 2.Viewstate 优化 3.Cache 优化 4. 控件优化与选择 5. 返回多个记录集 6. 数据分页优化 7.Ado.Net 对象选择 8. 数据前绑定 9. 存储过程优化, C # Coding 优化. 1. 会话状态的恰当选择. StateServer :表示状态服务在一台名为 myserver 的机器的 42424 端口(默认端口)运行。

dexter
Download Presentation

ASP.Net 性能优化

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ASP.Net 性能优化 ChengDu MIS Jin.J.Qin

  2. 议 程 • 1.会话状态的恰当选择 • 2.Viewstate优化 • 3.Cache优化 • 4.控件优化与选择 • 5.返回多个记录集 • 6.数据分页优化 • 7.Ado.Net对象选择 • 8.数据前绑定 • 9.存储过程优化,C# Coding优化

  3. 1.会话状态的恰当选择 StateServer :表示状态服务在一台名为myserver的机器的42424端口(默认端口)运行。 要在服务器上改变端口,可编辑HKLM\SYSTEM\CurrentControlSet\Services\aspnet_state注册表项中的Port值。 • ASP.NET通过将会话状态信息存储在进程、状态服务器或SQL Server数据库中来解决这个问题。 • <sessionState mode="InProc" cookieless="true" timeout="20"/> • <sessionState mode="StateServer" stateConnectionString="tcpip=myserver:42424" cookieless="false" timeout="20" /> • <sessionState mode="sqlserver" sqlConnectionString="data source=127.0.0.1; userid=sa; password=" cookieless="false" timeout="20" /> 管理员需要创建ASPState数据库,方法是运行 WinDir\Microsoft.Net\Framework\Version文件夹中的InstallState.sql脚本。 要配置SQL服务器,可以在命令行中运行SQL Server 提供的命令行工具osql.exe osql -S [ server name] -U [user] -P [password] InstallSqlState.sql

  4. 2.Viewstate优化 定义:保持页面或控件状态的视图对象。 --使用ViewState ,每个对象都必须先序列化到 ViewState 中,回传时再进行反序列化,因此使用 ViewState是有代价的。 • ViewState是什么 • 什么地方可以不需要ViewState • (1)页面控件 (.ascx) • (2)页面不回传给自身。 • (3)无需对控件的事件处理。 • (4)控件没有动态的或数据绑定的属性值 • 如何禁用ViewState • 单个页面:<%@ Page EnableViewState="False" %> • 每个页面:在 web.config 中 <Pages EnableViewState="false" /> • 控件:ViewState属性

  5. 3.Cache优化 • 缓存简介 • 页面缓存 • 页面整体缓存 • 局部页面缓存 • 数据缓存

  6. 3.Cache优化 • private Cache _cache; • 插入Cache: • _cache.Insert(key, obj, dep, DateTime.Now.AddSeconds(), TimeSpan.Zero, priority, null); • 移除Cache: • _cache.Remove(key); • 获取Cache中对象 • object ocache=_cache[key]; • Cache清除: • IDictionaryEnumerator enumerator = _cache.GetEnumerator(); • while (enumerator.MoveNext()) • { • _cache.Remove(enumerator.Key.ToString()); • } //从上下文中读缓存项 datatable newstb = HttpContext.Current.Items[cacheKey] as datatable ; if (newstb == null) { //从HttpRuntime.Cache读缓存项 newstb = SiteCache.Get(cacheKey) as datatable ; if (newstb == null) { //直接从数据库从读取 …….. //并将结果缓存到HttpRuntime.Cache中 _cache.Insert(cacheKey, newsSet, 60, CacheItemPriority.Normal); } • System.Web.Caching :Cache • Cache的使用 • 注意事项: • Cache即时更新 • Cache时限 • 指定文件或目录变更,则原Cache项不可用 • 使用顺序注意项

  7. 4.控件优化与选择 DataGrid:自带最强大的数据显示控件,虽然使用方便了,HTML冗余代码多,性能开销大。,如果你想尽量基于Web标准开发,请抛弃它。 DataList:比DataGrid功能少了很多。但自定义性强,特有的多行数据显示。DataGrid能实现的功能,它基本能实现。所以建议使用它。 Repeater:功能最少,但自定义性强,开销最小。如果只需对数据显示,建议使用。 (1)如果html控件达不到所要实现的功能,而且和一些脚本语言(如javascrpt/vbscript)结合也不能实现的话,才会选择服务器控件。 (2)对于不需要服务器处理事件的控件,尽量选择html控件 (3)选择服务器控件后,也尽量对其控件优化,如取消一些页面状态等(参见前面的Viewstate) • Html控件和服务器控件的选择。 • 数据控件选择优先顺序:Repeater、DataList、DataGrid • Ispostpack • 默认false.需要产生事件的时候才需设置为true,否者回发即耗资源,用户体验又差 • 顺便提一下Ajax:优点,缺点

  8. 5.返回多个记录集 • 不要期望GC会在你想象的时间内关掉连接,虽然最终都要销毁对象和关闭边接,尽量减少链接池。 • 在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量。 • 根据情况将部分业务处理放在SP中(如表间操作非常频繁而业务本身较简单),减少数据库链接、访问次数。 • 对数据的更新不需要返回结果集,建议使用ExecuteNonQuery • 单个值的查询使用ExecuteScalar

  9. 6.数据分页优化 • Datagrid,又见Datagrid • 在web开发中,分页有两种方式: • (1)将全部数据取出再分页 • (2)只取你想要页的数据。 • DataGrid自带分页是第一种方式,在数据记录数不多时,可使用,简便。 • 如果数据记录过大,比如10W条记录,每页100条,采用第一中方式是否明智?编写分页存储过程取数据是必要的,但是相对开发成本高。

  10. 7.Ado.Net对象选择 • 神通广大的DataSet • 独立好用的DataTable • 快速简单的DataView • 飞速但不断奶的DataReader

  11. 8.数据前绑定 • <%# DataBinder.Eval(Container.DataItem, "字段名") %> • 用DataBinder.eval 绑定不必关心数据来源(Dataread或dataset)。不必关心数据的类型eval会把这个数据对象转换为一个字符串。在底层绑定做了很多工作,使用了反射性能。正因为使用方便了,但却影响了数据性能。 • <%#ctype(Container.DataItem,DataRowView).Row("字段名") %> • 当于dataset绑定时,DataItem其实式一个DataRowView(如果绑定的是一个数据读取器(dataread)它就是一个IdataRecord。)因此直接转换成DataRowView的话,将会给性能带来很大提升。 • 1.需在页面添加<%@ Import namespace="System.Data"%>. • 2.注意字段名的大小写(要特别注意)。

  12. 9.存储过程优化,C# Coding优化 • 参加其它Training • 没有最好,只有更好

  13. ~Q & A~ THANKS! HA~HA~

More Related