提高ASP.NET性能的方法

来源:互联网 发布:windows查询监听端口 编辑:程序博客网 时间:2024/05/21 08:52

一、性能参数:
1、 吞吐量
2、 响应时间
3、 执行时间
4、 可伸缩性

二、性能因素:
1、ASPX执行环境
2、编写代码逻辑
三、提高性能的方法:
1、 避免不必要的操作.例如:在Page_Load中使用IsPostBack;
2、 尽量减少使用服务器端控件
3、 关闭不必要的页面Session和控件的ViewState <%@Page EnableSessionState =”false”%>
4、 禁用VB和JSP动态类型   <%@Page Language=”VB” Strict=”true”%>
5、 使用存储过程
6、 使用DateReader代替DataSet
7、 关闭ASP.Net的Debug模式
8、 使用ASP.Net的Output Cache缓冲
<%@ OutputCache Duration=60 VaryByParam=”None” %>
<%@ OutputCache Duration=60 VaryByParam=”TextBox1,TextBox2” %>
说明: Duration是设置Cache的过期时间;
     VarByParam是设置是否根据参数而变化,None时所有参数使用同一Cache,设置TextBox1时则根据TextBox1的不同值分别缓存;当有多个参数时则要组合缓存;
9、 不要使用Exception控制程序流程
try
{
       result=100/num;
}
catch(Exception e)

{
       result=0;
}

if(num!=0)
       result = 100/num;
else
       result=0;

四、缓冲分类:
1页面缓冲:根据VarByParam来进行不同的缓冲处理。
2片段缓冲:在页面控件中使用页面缓冲,当一个页面里多次使用同一个页面控件时,需要根据VarByControl来进行不同的缓冲处理。
3数据缓冲:Cache(范围是和Application一样,所有用户)
Cache.Insert(“MyData”,Source,null,new CacheDependency(Server.MapPath(“authors.xml”)));
Cache.Insert(“MyData”,Source,null,DateTime.Now.AddHours(1),TimeSpan.Zero);
Cache.Insert(“MyData”,Source,null,DateTime.MaxValue,TimeSpan.FromMinutes(20));





1、避免不必要的执行操作
2、关闭不必要的Session状态
3、注意使用Server Control 不必要时可以不使用Server Control
4、不必要时可以关闭ViewState
5、不要用Exception控制程序流程
try {
result = 100 / num;
}
catch (Exception e) {
result = 0;
}
6、只读数据访问不要使用DataSet 使用SqlDataReader代替DataSet
7、关闭ASP.NET的Debug模式 web.config里的debug要为false,并且dll文件编译是要生成为release版本的
8、使用ASP.NET Output Cache缓冲数据
9、对大量使用的很少更新的数据进行数据缓冲

提供缓冲功能是ASP.net中非常强大的一种功能。曾看到过某些评测说:ASP.net程序的性能比SUN的JSP应用程序性能快上几倍,实际上,该评测程序非常重要的一点就是使用了很多ASP.net的缓冲功能。

ASP.net中常用的缓冲方式有:

n          页面缓冲

一个例子:查询北京市的天气。因为天气数据在一定的时间内是相对规定的。

当Web程序中第一次查询北京市的天气时,应用程序可能是调用一个远程的WebService获取天气信息。而其后的用户就可以从缓冲中得到当前的天气信息。这将大大提高性能,减少服务器的压力。

方式:

u        :指明页面使用缓冲

u        Duration:控制缓冲有效的时间,单位为分钟。

u        VaryByParam:用于指明是否缓冲的判断依据。例如,如果第一个用户查询的是北京的天气,则缓冲中存储了北京市的天气。当第二个用户查询上海的天气时,为避免读取到错误的缓冲,可以用这样的代码缓冲多个城市的天气:


这就指明了根据页面URL中的cityName参数来缓冲多份数据。

n          片断缓冲

在ASP.net中,除了在页面范围内使用缓冲,也还可以针对User Control使用Output Cache参数实现对用户
控件的缓冲。同样的,一个页面中相同类型的控件也可以有多个不同的缓冲。可以根据参数来实现不同的缓冲。

例如:对于
控件可以根据Control 的C属性的不同实现不同的缓冲。

n          数据缓冲

n          缓冲的过期依赖条件

某种意义上,Cache和Application是一样的,都是一种公有的对象。为了取得缓冲与数据有效性之间的平衡,可以根据需要对缓冲过期策略进行合理的设置。

u        文件依赖

Cache.Insert (“Mydata”, Source

                            , New CacheDependency(Server.MapPath(“authors.xml”)))

此代码的含义是当authors.xml文件不发生变化的时候,缓冲MyData始终有效。



u        时间依赖

设定1小时后过期,这是一种绝对过期。

Cache.Insert(“Mydata”,Source,null

                           ,DateTime.Now.AddHours(1),TimeSpan.Zero);

u        相对过期依赖

当DataSet不再发生变化20分钟以后,缓冲过期。

Cache.Insert(“MyData”,Source,null

                         ,DateTime.MaxValue,TimeSpan.FromMinutes(20));


9、尽量使用存储过程数据访问
10、页面能静态的就不要动态
11、能用JS实现的效果都用JS实现,能在客户端实现的就减少回发
12、转向用Server.Transfer,不用Response.Direct
13、ADO.NET对象在一次使用过程中不要重复打开创建,尽量使用一个Connection、一个Command、一个DataReader,并且记得不再调用数据库数据时马上关闭、释放
14、数据集采用要多少给多少,杜绝不分字段不分页
15、能不用DataSet/DataGrid就不要使用
16、运行在win2003企业版上


1的原因就不用提了吧
2减少消耗内存
3减少server control解释成html的时间
4减少传递时增加的隐藏数据,同时也减小传输文件
5为什么非让它撞南墙再回头
6SqlDataReader效率高于DataSet
7正是版本不应用Debug
8Output Cache缓冲的页听说比静态也还快(直接从内存输出连文件都不用读)
9同样的数据,预先拿出来,放到内存总比在数据库或文件中快吧
9存储过程是数据库预先优化和编译的
10动态的需要先解释啊
11办一件事,故意让你来回跑上几趟,你乐意吗?
12Response.Direct需要先回到客户那里报个到
13本来你手中有个笔,可是写字时你却先放下,再换一个
14要枝给树
15我认为DataGrid过于花哨,DataSet用来缓存数据很好,经常要换的话就浪费了
16win2003企业版是集成.NET的操作系统




1.注意关闭不必要的Session状态.
2.不必要时,可以不使用Server Control 。并注意不需要时关闭View State
3.不要用异常处理来控制程序流程。很多的地方可以用条件判断。
4.禁用VBS、JS的动态数据类型。
5.注意关闭Debug模式。
6.注意使用OutputCache。
数据访问:
1.尽量使用存储过程。
2.只读数据访问不要使用DateSet。
3.数据库设计室。尽量使各个模块以及表相独立。以便日后利于分布数据库。
原创粉丝点击