ASP.NET 中的缓存功能介绍

ASP.NET 中的缓存功能介绍

 

ASP.NET的性能状况

ASP是脚本解释执行的   

ASP.NET的引擎从原理上保证高性能 一次编译

 

ASP.NET的性能状况

*       ASP.NET的引擎从原理上保证高性能

*       CLR Just-in-time Compiler

*       对多CPU有很好的支持

*       运行时优化编译

*       引擎的优化不能彻底解决性能问题

*       代码逻辑不优化

*       引擎无法控制的,潜在的性能优化点

 

性能问题与优化原则

*       性能参数

*       吞吐量:绝大部分测试都是以吞吐量为标准,在评测中我们考虑用户连接数。

*       响应时间

*       执行时间

*       可伸缩性

 

*       基本优化原则

*       减少不必要的资源消耗CPU,内存

性能提高的技巧

*       避免不必要的执行操作

*       Page_Load IsPostBack

Page_Load

Properties_Change

Action

 

Asp.net服务器段执行的事情请求顺序。其中Properties_Change事件包括(比如TextBoxTextChanged事件,这种事件如果被频繁引发,将加重服务器端的负荷,在Asp.net中这种事件,一般将和Action事件一起发送到服务器),Action事件(比如ButtonClick事件)

 

 

void Page_Load(Object sender, EventArgs e)

{

    // ...set up a connection and command here...

    if (!Page.IsPostBack)

    {

        String query = "select * from Authors where FirstName like '%JUSTIN%'";

        myCommand.Fill(ds, "Authors");

        myDataGrid.DataBind();

    }

}

 

 

void Button_Click(Object sender, EventArgs e)

{

    String query = "select * from Authors where FirstName like '%BRAD%'";

    myCommand.Fill(ds, "Authors");

    myDataGrid.DataBind();

}

 

*       关闭不必要的Session状态

*       <%@ Page EnableSessionState="false" %>

*       注意使用Server Control

*       不必要时可以不使用Server Control

*       不必要时可以关闭ViewState

*       <asp:datagrid EnableViewState="false“ runat="server"/>

*       <%@ Page EnableViewState="false" %>

*       不要用Exception控制程序流程

try

{

    result = 100 / num;

}

catch (Exception e)

{

    result = 0;

}

这样的执行是比较耗时的,可以简单应用下面的

if (num != 0)

    result = 100 / num;

else

result = 0;

 

*       禁用VBJScript动态数据类型

*       <%@ Page Language="VB" Strict="true" %>

*       使用存储过程数据访问

*       只读数据访问不要使用DataSet

*       使用SqlDataReader代替DataSet

*       SqlDataReaderread-only, forward-only

*       关闭ASP.NETDebug模式

*       使用ASP.NET Output Cache缓冲数据

ASP.NET输出缓冲

*       页面缓冲

*       <%@OutputCache%>

*       Duration

*       VaryByParam:由于输入参数的不同,每个OutputCache版本也不同

<%@OutputCache    Duration=60   VaryByParam =”TextBox(控件名)”%>

*       片断缓冲

*       VaryByControl

*       上面页面缓冲是对于整个页面而言的,在更多的时候,我们是把需要缓冲的控件做成一个用户控件,并打上OutputCache标记。但是这时候有一个比较严重的情况,假设在页面上有同一用户空间的不同实现对象,在页面加载的时候,当用户控件的一个实现完成时,第二个用户控件将应用第一个的Cache,这时候我们就需要设置VaryByControl

ASP.NET输出缓冲

* 数据缓冲

* 过期依赖条件

ASP.NET 还提供Cache对象,具体我们参考MSDN

Cache.Insert("MyData", Source, new CacheDependency(Server.MapPath("authors.xml")));

Cache.Insert("MyData", Source, null, DateTime.Now.AddHours(1), TimeSpan.Zero);

//Cache没有重写的时候,20分钟后将过期;如果重写,时间将重新开始

Cache.Insert("MyData", Source, null, DateTime.MaxValue,TimeSpan.FromMinutes(20));

 

ASP.NET 1.0的缓存机制

1.           缓存对应用程序的性能具有最大的影响

尽早缓存,经常缓存

缓存可以防止许多过失

2.           ASP.NET提供主要形式的缓存

页面缓存(OutputCache指令)

片段缓存(用户控件输出缓存)

3.           数据过期问题,特别是数据库驱动的应用程序,在数据库的数据更改时。

ASP.NET 2.0中新增的缓存功能

l           新增的DataSource控件

sqlDataSource AccessDataSource ObjectDataSource

使用DataSource控件缓存数据

默认情况下,sqlDataSource使用绝对过期策略来缓存数据。此外,你还可以选择使用可变过期策略。可以通过属性的选择CacheExpirationPolicy来改变过期策略,如果是Sliding就是没CacheDuration时间就刷新数据,默认情况是absolute

[参考代码]

<asp:DropDownList ID="DropDownList1" DataSourceId="SqlDataSource1" DataTextField="title" Runat="server" />

//Cache过期时间,这里表示每隔300秒刷新数据

<asp:SqlDataSource ID="SqlDataSource1" EnableCaching="True" CacheDuration="300" ConnectionString="<%$ ConnectionStrings:pubsConnectionString %>"

SelectCommand="SELECT * FROM [titles]" Runat="server" />

l           Substitution控件

l           SQL Cache Invalidation

              解决ASP.NET1.0中数据过期的问题

ASP.NET 2.0中新增的缓存功能

l         使用Post-Cache Substitution的场合

ASP.NET1.0使用用户控件缓存。

我们的需求是在缓存页面的内容情况下动态添加内容。

l         Substitution控件:使用Substitution控件,可以在缓存的页面中插入动态内容。

 

//页面缓存的内容,在页面过期之间内容不会改变

<p>Time:<%= DateTime.Now.ToString() %></p>

//动态缓存的内容,没刷新一次内容就及时更新

<b>Real Time:

<asp:Substitution ID="Substitution1" runat="server" MethodName="GetCurrentDate" />

</b>

<script runat="server">

    Shared Function GetCurrentDate(ByVal context As HttpContext) As String

        Return Now.ToString()

    End Function

</script>

ASP.NET 2.0中新增的缓存功能

l         SQL Cache Invalidation

对数据的任何更新,都能马上在缓存变化,而不必等到缓存时间到期

l         功能实现步骤(只能运行于SQL SERVER7.0以上版本)

1.         配置SQL Server支持SQL Cache Invalidation

命令状态下进入cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215\

aspnet_regsql -S slhsql2005-1 -E -d pubs -ed

aspnet_regsql -S slhsql2005-1 -E -d pubs -t authors –et

具体含义:

       aspnet_regsql命令帮助(-S -E 要大写)

-S 连接的数据库服务器

-E 使用身份认证方式(Windows集成认证)

-d 使用的数据库

-ed 为这个数据库启用SQL Cache Invalidation

             

-t 使用的表

-et 为这个数据库启用SQL Cache Invalidation

2.         编写ASP.Net程序代码使用SQL Cache Invalidation

页面配置:定义页面缓存输出时间600 pubs:authors大小写敏感

<%@ OutputCache Duration="600" varybyparam="none" sqldependency="pubs:authors"%>

//定义PageLoad事件,这里只是为了演示效果。这样数据库一更新,时间和DataView都进行更//新,而不用等到过期时间。

Protected Sub Page_Load(ByVal sender As Object,

ByVal e As System.EventArgs) Handles Me.Load

              Label1.Text = CType(System.DateTime.Now(), String)

End Sub

3.         配置Web.config

<system.web>配置,pubsConnectionString对应数据库连接字符串

<caching>

              <sqlCacheDependency enabled="true" pollTime="1000" >

                   <databases>

                       <add name="pubs" connectionStringName="pubsConnectionString" />

                   </databases>

              </sqlCacheDependency>

</caching>

<configuration>中配置

<connectionStrings>

<add name="pubsConnectionString" connectionString="Data Source=.;Initial Catalog=pubs;Integrated Security=True"  providerName="System.Data.SqlClient" />

</connectionStrings>

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=908970

posted @ 2006-08-18 15:47  MSDI  阅读(307)  评论(0编辑  收藏  举报