亲自动手测试PetShop4.0中所谓的"允许中间层对象缓存在后端数据库信息更改时自动失效"
2008-07-10 15:51
447 查看
微软的PetShop4.0的说明的链接中有这么一段话:ASP.NET2.0是SQL缓存依赖项:允许中间层对象缓存在后端数据库信息更改时自动失效。对于SQL2000,它在表级别有效(如同在PetShop4中一样),而对于SQLServer2005,它也可以在单独的行级别有效。利用该功能,缓存的数据库信息可以始终保持是最新的,同时仍利用缓存来降低中间层和数据库服务器上的负载。
其中重点是:允许中间层对象缓存在后端数据库信息更改时自动失效
我调试了一下PetShop4.0,调试时,直接在数据库里修改表product的Name的修息,看它有没有在主动刷新或跳转后再回来后程现的是最新的数据,我的结论是它有时侯行,有时侯不行,但总算比VS2003中好用.
由于PetShop4.0解决方案源代码是一整套,对于想单独了解此功能感觉太多东西了,所以我单独写一小例子,
现在我就来实例测一下:
1.建程序,命名WebApplication为TestImmediateCache,在Web.Config的<system.web>节点中加入
上面的配置主要作用是将缓存与指定的DB持钩,在<configuration>节点中加入
其中重点是:允许中间层对象缓存在后端数据库信息更改时自动失效
我调试了一下PetShop4.0,调试时,直接在数据库里修改表product的Name的修息,看它有没有在主动刷新或跳转后再回来后程现的是最新的数据,我的结论是它有时侯行,有时侯不行,但总算比VS2003中好用.
由于PetShop4.0解决方案源代码是一整套,对于想单独了解此功能感觉太多东西了,所以我单独写一小例子,
现在我就来实例测一下:
1.建程序,命名WebApplication为TestImmediateCache,在Web.Config的<system.web>节点中加入
<caching> <sqlCacheDependencyenabled="true"pollTime="10000"> <databases> <addname="MSPetShop4"connectionStringName="SQLConnectionString"pollTime="10000"/> </databases> </sqlCacheDependency> </caching>
上面的配置主要作用是将缓存与指定的DB持钩,在<configuration>节点中加入
<appSettings> <addkey="SQLConnectionString"value="datasource=apj007;initialcatalog=MSPetShop4;userid=sa;password=1;persistsecurityinfo=true;packetsize=4096;minpoolsize=1;maxpoolsize=50;connectiontimeout=180"/> </appSettings> <connectionStrings> <addname="SQLConnectionString"connectionString="datasource=apj007;initialcatalog=MSPetShop4;userid=sa;password=1;persistsecurityinfo=true;packetsize=4096;minpoolsize=1;maxpoolsize=50;connectiontimeout=180"/> </connectionStrings>
2.添加页面代码
<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="TestImmediateCache._Default"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>UntitledPage</title>
</head>
<body>
<formid="form1"runat="server">
<asp:ScriptManagerID="ScriptManager1"runat="server"/>
<div>
<table>
<tr>
<td>
<asp:ButtonID="Button1"runat="server"Text="Button"/></td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
<asp:LabelID="Label1"runat="server"Text="Label"></asp:Label></td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
C#的:
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Data.SqlClient;
usingSystem.Web.Caching;
namespaceTestImmediateCache
{
publicpartialclass_Default:System.Web.UI.Page
{
protectedAggregateCacheDependencydependency=newAggregateCacheDependency();
protectedvoidPage_Load(objectsender,EventArgse)
{
stringconStr=ConfigurationManager.AppSettings["SQLConnectionString"];
stringsqlStr="";
sqlStr="selectNamefromProductwhereProductID=@ProductID";//FI-08
SqlParameter[]parms;
parms=newSqlParameter[]
{
newSqlParameter("@ProductID",SqlDbType.VarChar,10)
};
parms[0].Value="FI-08";
//AddtoCache
stringdata=(string)HttpRuntime.Cache["PetName"];
if(data==null)
{
objectobj=DataAccess.SqlHelper.ExecuteScalar(conStr,CommandType.Text,sqlStr,parms);
data=obj.ToString();
//HttpRuntime.Cache.Add("PetName",data,cd,DateTime.Now.AddHours(cacheDuration),Cache.NoSlidingExpiration,CacheItemPriority.High,null);
intcacheDuration=12;
dependency.Add(newSqlCacheDependency("MSPetShop4","Product"));
AggregateCacheDependencycd=this.dependency;
HttpRuntime.Cache.Add("PetName",data,cd,DateTime.Now.AddHours(cacheDuration),Cache.NoSlidingExpiration,CacheItemPriority.High,null);
}
this.Label1.Text=data;
//this.CachePolicy.Dependency=this.dependency;
//System.Web.UI.UserControluc=newUserControl();
//uc.CachePolicy
}
}
}
最后调试后,发现情况还是和PetShop4.0一样,有时侯行,有时侯要刷一次以上才可以.那位大虾看到的话,解决问题可以留个答复给我吗?
相关文章推荐
- "此数据库没有有效所有者,因此无法安装数据库关系图支持对象" 解决方法
- 利用Word的"邮件合并"功能,自动发送工资表邮件(亲自实践)
- 图解用"MySQL Administrator"工具实现自动备份数据库
- "Mac OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("Mac OS X"想使用系统钥匙串)
- "此数据库没有有效所有者,因此无法安装数据库关系图支持对象"的解决方法
- "此数据库没有有效所有者,因此无法安装数据库关系图支持对象"的解决方法
- "尚未注册网络"错误信息的解决办法
- MVC详解:了解真正所谓的"框架"(http://vipnews.csdn.net/newscontent.aspx?pointid=2009_02_01_144216610)
- iOS8: Ignore manifest download, already have bundleID新发现『问题bundleID缓存在iOS系统"文件系统"下的数据库中』
- "此数据库没有有效所有者,因此无法安装数据库关系图支持对象"的解决方法
- 多角度彻底理解数据库事务中的"脏读"."不可重复的读"及"虚读"
- 数据库关系图:“此数据库没有有效所有者,因此无法安装数据库关系图支持对象"的解决方法
- "SQL Server 2000"数据库的备份与还原
- "对几组sizeof信息的分析"一文补充
- 学生信息管理系统总结 之 "数据库"
- 所谓"在表达式中,数组名总是被转换为指向该数组第一个元素的指针"应该如何理解?
- 附加数据库出现"所指定的文件不是有效的SQL Server数据库文件"
- "允许更新此预编译站点"和网站安全、首次速度的关系 (转自 csdn姚俊华)
- "未将对象引用设置到对象的实例"异常的原因
- 用C实现C++的多态---剖析GTK的"对象" (四)