ASP.NET性能优化
2010-10-31 08:59:55 来源:WEB开发网核心提示:1. 识别创建与访问代价较大的数据2. 评估需要缓存数据的易变性3. 评估数据的使用频次4. 将要缓存数据中易变数据和不变数据分离,只缓存不变数据5. 选择合适的缓存机制(除Asp.net Cache外,ASP.NET性能优化(13),Application state和Session state也可以作为缓存使用)3
1. 识别创建与访问代价较大的数据
2. 评估需要缓存数据的易变性
3. 评估数据的使用频次
4. 将要缓存数据中易变数据和不变数据分离,只缓存不变数据
5. 选择合适的缓存机制(除Asp.net Cache外,Application state和Session state也可以作为缓存使用)
3.4 多线程
1. 避免在请求处理过程中创建线程
在执行请求的过程中创建线程是一种代价较大的操作,会严重影响Web Server的性能。如果后续的操作必须用线程完成,建议通过thread pool来创建/管理线程。
2. 不要依赖线程数据槽或线程静态变量
由于执行请求的线程是ASP.NET thread pool中的工作线程,同一个Client的两次请求不一定由相同的线程来处理。
3. 避免阻塞处理请求的线程
参考"避免阻塞和长时间的作业"小节。
4. 避免异步调用
这和1的情况类似。异步调用会导致创建新的线程,增加服务器的负担。所以,如果没有并发的作业要执行,就不要执行异步调用。
3.5 系统资源
1. 考虑实现资源池以提升性能
2. 明确地调用Dispose或Close释放系统资源
3. 不要缓存或长时间占用资源池中的资源
4. 尽可能晚的申请,尽可能早的释放
3.6 页面处理
1. 尽量减小Page的尺寸
包括缩短控件的名称、CSS的class的名称、去掉无谓空行和空格、禁用不需要的ViewState
2. 启用页面输出的缓冲区(Buffer)
如果Buffer的机制被关闭,可以用下面的方法打开。
使用程序打开页面输出缓存:
Response.BufferOutput = true;
使用@Page开关打开页面输出缓冲机制:
<%@ Page Buffer = "true" %>
使用Web.config或Machine.config配置文件的<pages>节点:
<pages buffer="true" …>
3. 利用Page.IsPostBack优化页面输出
4. 通过分离页面的不同的内容,来提高缓存效率和减少呈现的时间
5. 优化复杂和代价较大的循环
6. 合理利用客户端的计算资源,将一些操作转移到客户端进行
3.7 ViewState
ViewState是Asp.net为服务端控件在页面回传之间跟踪状态信息而设计的一种机制。
1. 关闭ViewState
如果不需要跟踪页面状态,例如页面不会 回传(PostBack)、不需要处理服务端控件事件或者每次页面刷新时都会重新计算控件内容,那么就不需要用ViewState来记录页面状态了。可以 对特定的WebControl设置EnableViewState属性,也可以在页面一级设置:
<%@ Page EnableViewState="false" %>
2. 在恰当的时间点初始化控件属性
ASP.NET的控件在执行构造函数、初始化的期间设置的属性不会被跟踪变化;而在初始化阶段之后对属性的修改都会被跟踪,并最终记录到IE页面的__VIEWSTATE之中。所以,选择合理的初始化控件属性的执行点,能有效的减小页面尺寸。
3. 谨慎选择放到ViewState中的内容
放到ViewState中的内容会被序列化/反序列 化,Asp.net为String、Integer、Boolean等基本类型的序列化做了优化,如果Array、ArrayList、 HashTable存储的是基本类型效率也较高,但其它类型则需要提供类型转换器(Type Converter),否则将使用代价昂贵的二进制序列化程序。
4.1 JScript性能优化的基本原则
1. 尽可能少地减少执行次数。毕竟对解释语言来说,每一个执行步骤,都需要和解释引擎做一次交互。
2. 尽可能使用语言内置的功能,比如串链接。
3. 尽可能使用系统提供的API来进行优化。因为这些API是编译好的二进制代码,执行效率很高。
2. 评估需要缓存数据的易变性
3. 评估数据的使用频次
4. 将要缓存数据中易变数据和不变数据分离,只缓存不变数据
5. 选择合适的缓存机制(除Asp.net Cache外,Application state和Session state也可以作为缓存使用)
3.4 多线程
1. 避免在请求处理过程中创建线程
在执行请求的过程中创建线程是一种代价较大的操作,会严重影响Web Server的性能。如果后续的操作必须用线程完成,建议通过thread pool来创建/管理线程。
2. 不要依赖线程数据槽或线程静态变量
由于执行请求的线程是ASP.NET thread pool中的工作线程,同一个Client的两次请求不一定由相同的线程来处理。
3. 避免阻塞处理请求的线程
参考"避免阻塞和长时间的作业"小节。
4. 避免异步调用
这和1的情况类似。异步调用会导致创建新的线程,增加服务器的负担。所以,如果没有并发的作业要执行,就不要执行异步调用。
3.5 系统资源
1. 考虑实现资源池以提升性能
2. 明确地调用Dispose或Close释放系统资源
3. 不要缓存或长时间占用资源池中的资源
4. 尽可能晚的申请,尽可能早的释放
3.6 页面处理
1. 尽量减小Page的尺寸
包括缩短控件的名称、CSS的class的名称、去掉无谓空行和空格、禁用不需要的ViewState
2. 启用页面输出的缓冲区(Buffer)
如果Buffer的机制被关闭,可以用下面的方法打开。
使用程序打开页面输出缓存:
Response.BufferOutput = true;
使用@Page开关打开页面输出缓冲机制:
<%@ Page Buffer = "true" %>
使用Web.config或Machine.config配置文件的<pages>节点:
<pages buffer="true" …>
3. 利用Page.IsPostBack优化页面输出
4. 通过分离页面的不同的内容,来提高缓存效率和减少呈现的时间
5. 优化复杂和代价较大的循环
6. 合理利用客户端的计算资源,将一些操作转移到客户端进行
3.7 ViewState
ViewState是Asp.net为服务端控件在页面回传之间跟踪状态信息而设计的一种机制。
1. 关闭ViewState
如果不需要跟踪页面状态,例如页面不会 回传(PostBack)、不需要处理服务端控件事件或者每次页面刷新时都会重新计算控件内容,那么就不需要用ViewState来记录页面状态了。可以 对特定的WebControl设置EnableViewState属性,也可以在页面一级设置:
<%@ Page EnableViewState="false" %>
2. 在恰当的时间点初始化控件属性
ASP.NET的控件在执行构造函数、初始化的期间设置的属性不会被跟踪变化;而在初始化阶段之后对属性的修改都会被跟踪,并最终记录到IE页面的__VIEWSTATE之中。所以,选择合理的初始化控件属性的执行点,能有效的减小页面尺寸。
3. 谨慎选择放到ViewState中的内容
放到ViewState中的内容会被序列化/反序列 化,Asp.net为String、Integer、Boolean等基本类型的序列化做了优化,如果Array、ArrayList、 HashTable存储的是基本类型效率也较高,但其它类型则需要提供类型转换器(Type Converter),否则将使用代价昂贵的二进制序列化程序。
4.1 JScript性能优化的基本原则
1. 尽可能少地减少执行次数。毕竟对解释语言来说,每一个执行步骤,都需要和解释引擎做一次交互。
2. 尽可能使用语言内置的功能,比如串链接。
3. 尽可能使用系统提供的API来进行优化。因为这些API是编译好的二进制代码,执行效率很高。
- ››ASP.NET及JS中的cookie基本用法
- ››ASP.NET获取MS SQL Server安装实例
- ››asp.net实现调用百度pai 在线翻译英文转中文
- ››ASP.NET页面选项进行提示判断
- ››Asp.net定时执行程序
- ››ASP.NET中利用DataList实现图片无缝滚动
- ››ASP.NET验证控件RequiredFieldValidator
- ››ASP.NET中使用System.Net.Mail发邮件
- ››ASP.NET中获取用户控件中控件的ID
- ››ASP.NET中FileBytes写成文件并存档
- ››asp.net报“INSERT INTO 语句的语法错误解决
- ››Asp.net中表头合并 复杂表头实现
更多精彩
赞助商链接