使用数据源缓存
除了在页面或用户控件级别进行缓存之外,也可以在DataSource控件层面进行缓存。
SqlDataSource
ObjectDataSource
XmlDataSource
缓存,LinqDataSource不支持缓存
使用DataSource控件缓存的一个好处是DataSource控件可以在数据更新时自动重新载入数据。
DataSource控件同样非常聪明,可以在多个页面间共享相同的数据。
1、使用绝对缓存过期策略
当使用绝对缓存过期策略时,DataSource承载的数据在内存中缓存一段特定的时间。如果数据不会很频率地修改,使用绝对缓存过期策略就很有用。
如果知道保存在数据库表中的记录一天只会被修改一次,没理由有人Web页面时,每次都从数据库中读取相同的数据。
注意:
当使用SqlDataSource控件缓存时,SqlDatasource控件的DataSourceMode属性必须设为DataSet(默认值),而不是DataReader.
SqlDataSource控件并不保证会缓存数据到CacheDuration指定的时间,理解这一点非常重要。
在内部,DataSource控件使用了Cache对象进行缓存。该对象支持自我净化功能(scavenging)。当内存资源变得很低时,Cache对象会自动从缓存中移除项目。
关闭数据库,也会显示数据。
2、使用弹性缓存过期策略
使用弹性缓存过期策略时,除非数据在指定的时间内再次被请求访问,否则缓存就会失效。
DataSourceSlidingCache.aspx
[code]
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
lblMessage.Text = "Selecting data from database";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblMessage" EnableViewState="false" runat="server" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True"
SortExpression="id" />
<asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
<asp:BoundField DataField="Director" HeaderText="Director" SortExpression="Director" />
<asp:BoundField DataField="DateReleased" HeaderText="DateReleased" SortExpression="DateReleased" />
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
</Columns>
</asp:GridView>
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" EnableCaching="true" CacheExpirationPolicy="Sliding"
CacheDuration="15" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [Movies]" OnSelecting="SqlDataSource1_Selecting">
</asp:SqlDataSource>
</form>
</body>
</html>
[/code]
2011-5-30 21:47 danny
除了在页面或用户控件级别进行缓存之外,也可以在DataSource控件层面进行缓存。
SqlDataSource
ObjectDataSource
XmlDataSource
缓存,LinqDataSource不支持缓存
使用DataSource控件缓存的一个好处是DataSource控件可以在数据更新时自动重新载入数据。
DataSource控件同样非常聪明,可以在多个页面间共享相同的数据。
1、使用绝对缓存过期策略
当使用绝对缓存过期策略时,DataSource承载的数据在内存中缓存一段特定的时间。如果数据不会很频率地修改,使用绝对缓存过期策略就很有用。
如果知道保存在数据库表中的记录一天只会被修改一次,没理由有人Web页面时,每次都从数据库中读取相同的数据。
注意:
当使用SqlDataSource控件缓存时,SqlDatasource控件的DataSourceMode属性必须设为DataSet(默认值),而不是DataReader.
SqlDataSource控件并不保证会缓存数据到CacheDuration指定的时间,理解这一点非常重要。
在内部,DataSource控件使用了Cache对象进行缓存。该对象支持自我净化功能(scavenging)。当内存资源变得很低时,Cache对象会自动从缓存中移除项目。
关闭数据库,也会显示数据。
2、使用弹性缓存过期策略
使用弹性缓存过期策略时,除非数据在指定的时间内再次被请求访问,否则缓存就会失效。
DataSourceSlidingCache.aspx
[code]
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
lblMessage.Text = "Selecting data from database";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblMessage" EnableViewState="false" runat="server" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True"
SortExpression="id" />
<asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
<asp:BoundField DataField="Director" HeaderText="Director" SortExpression="Director" />
<asp:BoundField DataField="DateReleased" HeaderText="DateReleased" SortExpression="DateReleased" />
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
</Columns>
</asp:GridView>
</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" EnableCaching="true" CacheExpirationPolicy="Sliding"
CacheDuration="15" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [Movies]" OnSelecting="SqlDataSource1_Selecting">
</asp:SqlDataSource>
</form>
</body>
</html>
[/code]
2011-5-30 21:47 danny