ASP.NET 中的缓存功能介绍
2006-08-18 15:47
344 查看
ASP.NET 中的缓存功能介绍
ASP.NET的性能状况
ASP是脚本解释执行的ASP.NET的引擎从原理上保证高性能 一次编译
ASP.NET的性能状况
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
ASP.NET的引擎从原理上保证高性能
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
CLR Just-in-time Compiler
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
对多CPU有很好的支持
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
运行时优化编译
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
引擎的优化不能彻底解决性能问题
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
代码逻辑不优化
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
引擎无法控制的,潜在的性能优化点
性能问题与优化原则
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
性能参数
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
吞吐量:绝大部分测试都是以吞吐量为标准,在评测中我们考虑用户连接数。
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
响应时间
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
执行时间
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
可伸缩性
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
基本优化原则
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
减少不必要的资源消耗CPU,内存
性能提高的技巧
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
避免不必要的执行操作
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
Page_Load 和 IsPostBack
Page_Load |
Properties_Change |
Action |
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();
}
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
关闭不必要的Session状态
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
<%@ Page EnableSessionState="false" %>
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
注意使用Server Control
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
不必要时可以不使用Server Control
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
不必要时可以关闭ViewState
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
<asp:datagrid EnableViewState="false“ runat="server"/>
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
<%@ Page EnableViewState="false" %>
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
不要用Exception控制程序流程
try
{
result = 100 / num;
}
catch (Exception e)
{
result = 0;
}
这样的执行是比较耗时的,可以简单应用下面的
if (num != 0)
result = 100 / num;
else
result = 0;
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
禁用VB和JScript动态数据类型
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
<%@ Page Language="VB" Strict="true" %>
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
使用存储过程数据访问
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
只读数据访问不要使用DataSet
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
使用SqlDataReader代替DataSet
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
SqlDataReader是read-only, forward-only
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
关闭ASP.NET的Debug模式
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
使用ASP.NET Output Cache缓冲数据
ASP.NET输出缓冲
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
页面缓冲
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
<%@OutputCache%>
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
Duration
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
VaryByParam:由于输入参数的不同,每个OutputCache版本也不同
<%@OutputCache Duration=60 VaryByParam =”TextBox(控件名)”%>
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
片断缓冲
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
VaryByControl
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
上面页面缓冲是对于整个页面而言的,在更多的时候,我们是把需要缓冲的控件做成一个用户控件,并打上OutputCache标记。但是这时候有一个比较严重的情况,假设在页面上有同一用户空间的不同实现对象,在页面加载的时候,当用户控件的一个实现完成时,第二个用户控件将应用第一个的Cache,这时候我们就需要设置VaryByControl
ASP.NET输出缓冲
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
数据缓冲
![](file:///C:/DOCUME~1/UPC2NE~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif)
过期依赖条件
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
相关文章推荐
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- [ASP.NET学习笔记之五]ASP.NET 中的缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍
- ASP.NET 2.0的页面缓存功能介绍 [转]
- ASP.NET 2.0的页面缓存功能介绍(转)
- ASP.NET 2.0的页面缓存功能介绍