新手学习,这个困扰我3天了下面是我自己的理解,帮忙看下对不对.....
Petshop实现了类似于二重缓存,第一重是<%@ OutputCache Duration="100000" VaryByParam="page;categoryId" %>这个,缓存的是根据VaryByParam为索引来缓存整个页面(即根据这个来判断该页有没有缓存),这重缓存是缓存的是整个页面,包括ascx这个控件里的所有内容;第二重缓存是CachePolicy.Dependency = DependencyFacade.GetProductDependency()这个,它关联缓存设置,看数据库有没有改动,如果有改动那么整个页面缓存就过期,下面是petshop中的一段代码,前台和后台的
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ProductsControl.ascx.cs" Inherits="PetShop.Web.ProductsControl" EnableViewState="false" %>
<%@ Register TagPrefix="PetShopControl" Namespace="PetShop.Web" %>
<%@ OutputCache Duration="100000" VaryByParam="page;categoryId" %><div align="center" class="productsPosition">
<PetShopControl:CustomList ID="productsList" runat="server" EmptyText="No products found." OnPageIndexChanged="PageChanged" PageSize="4" RepeatColumns="2" CellPadding="16" CellSpacing="0" Width="500px">
<ItemTemplate>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</PetShopControl:CustomList>
</div>CustomList 继承自DataListprotected void PageChanged(object sender, DataGridPageChangedEventArgs e) {
//reset index
productsList.CurrentPageIndex = e.NewPageIndex; //get category id
string categoryKey = Request.QueryString["categoryId"]; //bind data
Product product = new Product();
productsList.DataSource = product.GetProductsByCategory(categoryKey);
productsList.DataBind(); } /// Add cache dependency
protected void Page_Load(object sender, EventArgs e) {
this.CachePolicy.Dependency = DependencyFacade.GetProductDependency();
}是不是这样了之后每次进入页面执行pageload(即检查有没有数据跟新),没得话然后再检查缓存,缓存有的话直接读取,如果换页的话也因为VaryByParam=page来判断是否有缓存,有的话直接读取,但是我不清楚PageChanged()要不要再执行啊?
也不知道我表达清楚了没,或者我的理解根本就是我想象出来的.......
Petshop实现了类似于二重缓存,第一重是<%@ OutputCache Duration="100000" VaryByParam="page;categoryId" %>这个,缓存的是根据VaryByParam为索引来缓存整个页面(即根据这个来判断该页有没有缓存),这重缓存是缓存的是整个页面,包括ascx这个控件里的所有内容;第二重缓存是CachePolicy.Dependency = DependencyFacade.GetProductDependency()这个,它关联缓存设置,看数据库有没有改动,如果有改动那么整个页面缓存就过期,下面是petshop中的一段代码,前台和后台的
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ProductsControl.ascx.cs" Inherits="PetShop.Web.ProductsControl" EnableViewState="false" %>
<%@ Register TagPrefix="PetShopControl" Namespace="PetShop.Web" %>
<%@ OutputCache Duration="100000" VaryByParam="page;categoryId" %><div align="center" class="productsPosition">
<PetShopControl:CustomList ID="productsList" runat="server" EmptyText="No products found." OnPageIndexChanged="PageChanged" PageSize="4" RepeatColumns="2" CellPadding="16" CellSpacing="0" Width="500px">
<ItemTemplate>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Top" />
</PetShopControl:CustomList>
</div>CustomList 继承自DataListprotected void PageChanged(object sender, DataGridPageChangedEventArgs e) {
//reset index
productsList.CurrentPageIndex = e.NewPageIndex; //get category id
string categoryKey = Request.QueryString["categoryId"]; //bind data
Product product = new Product();
productsList.DataSource = product.GetProductsByCategory(categoryKey);
productsList.DataBind(); } /// Add cache dependency
protected void Page_Load(object sender, EventArgs e) {
this.CachePolicy.Dependency = DependencyFacade.GetProductDependency();
}是不是这样了之后每次进入页面执行pageload(即检查有没有数据跟新),没得话然后再检查缓存,缓存有的话直接读取,如果换页的话也因为VaryByParam=page来判断是否有缓存,有的话直接读取,但是我不清楚PageChanged()要不要再执行啊?
也不知道我表达清楚了没,或者我的理解根本就是我想象出来的.......
解决方案 »
- 知道图片路径,怎样获取图片并上传
- Transaction
- 50分 sql一句
- log4net能否在VS2005下面使用,我编译显示缺少Nunit.Framework.dll
- 一个域名,一个虚拟主机空间 能否实现二级域名???
- 怎么写一段asp.net代码,把一个字符串中所有的HTML标记都去掉,只剩下文字内容呢?
- 请问大家在面试时都是穿的什么衣服啊,是不是都穿西装啊?
- gridview 按条件查询遇到的问题?急、急、急!
- Vista Home Pre IIS7.0 为什么我没有安装windows集成身份验证选项?
- 怎样设定被选中节点的样式!!(TreeView)
- asp.net mvc excel导入数据库
- 急求iframe内自动生成图片放大缩小方法
UP
如果Product的缓存有效或者说是存在,则从缓存中读取;如果缓存无效或者说已经过期,则再从数据库中读取,并且读取后在存入缓存中。