缓存(销毁)依赖
1:緩存依賴的類別
??????文件,數據表,數據行,一段時間,控件,查詢字符串等
2:緩存項之間的依賴
protected?void?Button3_Click(object?sender,?EventArgs?e)
{
????//?create?item?A?and?item?B
????string?itemA?=?"ItemA";
????string?itemB?=?"ItemB";
????Cache.Insert("ItemA",?itemA,?null,?DateTime.Now.AddMinutes(10),?
????TimeSpan.Zero,
????CacheItemPriority.Default,?MyItemRemovedCallBack);
????Cache.Insert("ItemB",?itemB,?null,?DateTime.Now.AddMinutes(10),?
????TimeSpan.Zero,
????CacheItemPriority.Default,?MyItemRemovedCallBack);
}
private?void?MyItemRemovedCallBack(string?key,?object?value,
???????????????????CacheItemRemovedReason?reason)
{
????//?remove?the?item?from?the?cache
????if?(key?==?"ItemA"?)?Cache.Remove("ItemB");
????else?if?(key.Equals?==?"ItemB")?Cache.Remove("ItemB");
}
以上代碼中
Key:緩存集合中唯一確認一項的鍵
Value:保存在緩存中的值
Reason:是"CacheItemRemovedReason"的一個枚舉.說明緩存項被移出的原因
我們也可以手動移出緩存
Cache.Remove("ItemA");3:?緩存依賴于文件
<?xml?version="1.0"?encoding="utf-8"?>
<MenuItems>
????<MenuItem>
????????<Text>Home</Text>
????</MenuItem>
????<MenuItem>
????????<Text>About?us</Text>
????</MenuItem>
????<MenuItem>
????????<Text>Contact?us</Text>
????</MenuItem>
????<MenuItem>
????????<Text>Help</Text>
????</MenuItem>
????<MenuItem>
????????<Text>Feature</Text>
????</MenuItem>
</MenuItems>
????string?menuPath?=?"MyFiles/Menu.xml";
????string?folderName?=?"MyFiles/";
????DataSet?ds?=?null;
????if?(Cache["Menu"]?==?null)
????{
????????ds?=?new?DataSet();
????????ds.ReadXml(Server.MapPath(menuPath));
????????//?menu?is?created
????????Cache.Insert("Menu",?ds,?new?System.Web.Caching.CacheDependency(
????????????Server.MapPath(menuPath)),DateTime.Now.AddMinutes(60),
????????????TimeSpan.Zero,
????????????System.Web.Caching.CacheItemPriority.Default,
????????????new?System.Web.Caching.CacheItemRemovedCallback(
??????????????????????????????????CacheItemRemovedCallBack));
???????DisplayCacheCreationTime("Object?was?not?in?the?cache?and?created?at:",
?????????????DateTime.Now.ToLongTimeString());
????}
????else
????{
????????//?menu?is?created?from?the?cache
????????DisplayCacheCreationTime("Object?was?in?the?cache",String.Empty);
????}
我們也可以將緩存依賴于文件夾.當文件夾下的文件和子級文件夾被創建,更新,刪除的時候跟新緩存.
4:數據庫中的緩存依賴
<connectionStrings>
????<add?name="ConnectionString"
?????????connectionString="Server=localhost;Database=School;
Trusted_Connection=true"/>
</connectionStrings>
<system.web>
????<caching>
????????<sqlCacheDependency?pollTime="10000"?enabled="true"?>
????????????<databases>
????????????????<add?connectionStringName="ConnectionString"?name="School"/>
????????????</databases>
????????</sqlCacheDependency>
????</caching></caching>
????if?(Cache["Users"]?==?null)
????{
????????//?Create?the?cache?dependency
????????SqlCacheDependency?dep?=?new?SqlCacheDependency("School",?"Users");
????????string?connectionString?=?ConfigurationManager.ConnectionStrings[
????????????????????????????????????????"ConnectionString"].ConnectionString;
????????SqlConnection?myConnection?=?new?SqlConnection(connectionString);
????????SqlDataAdapter?ad?=?new?SqlDataAdapter("SELECT?FirstName,?LastName?"?+
???????????????????????????????????????????????"FROM?Users",?myConnection);
????????DataSet?ds?=?new?DataSet();
????????ad.Fill(ds);
????????//?put?in?the?cache?object
????????Cache.Insert("Users",?ds,?dep);
????}
????gvUsers.DataSource?=?Cache["Users"]?as?DataSet;
????gvUsers.DataBind();
SqlCacheDependency dep = new SqlCacheDependency("School", "Users"); 這句話用于創建一個與數據庫School中表Users關聯的緩存.當我們對Users進行INSERT, DELETE, UPDATE操作的時候緩存會被移出(Cache["Users"]==null ).
這部分代碼適用于sql2000,在sql2005下沒有這么麻煩.回頭我們再討論sql2005下的緩存.
??????文件,數據表,數據行,一段時間,控件,查詢字符串等
2:緩存項之間的依賴
protected?void?Button3_Click(object?sender,?EventArgs?e)
{
????//?create?item?A?and?item?B
????string?itemA?=?"ItemA";
????string?itemB?=?"ItemB";
????Cache.Insert("ItemA",?itemA,?null,?DateTime.Now.AddMinutes(10),?
????TimeSpan.Zero,
????CacheItemPriority.Default,?MyItemRemovedCallBack);
????Cache.Insert("ItemB",?itemB,?null,?DateTime.Now.AddMinutes(10),?
????TimeSpan.Zero,
????CacheItemPriority.Default,?MyItemRemovedCallBack);
}
private?void?MyItemRemovedCallBack(string?key,?object?value,
???????????????????CacheItemRemovedReason?reason)
{
????//?remove?the?item?from?the?cache
????if?(key?==?"ItemA"?)?Cache.Remove("ItemB");
????else?if?(key.Equals?==?"ItemB")?Cache.Remove("ItemB");
}
以上代碼中
Key:緩存集合中唯一確認一項的鍵
Value:保存在緩存中的值
Reason:是"CacheItemRemovedReason"的一個枚舉.說明緩存項被移出的原因
我們也可以手動移出緩存
Cache.Remove("ItemA");3:?緩存依賴于文件
<?xml?version="1.0"?encoding="utf-8"?>
<MenuItems>
????<MenuItem>
????????<Text>Home</Text>
????</MenuItem>
????<MenuItem>
????????<Text>About?us</Text>
????</MenuItem>
????<MenuItem>
????????<Text>Contact?us</Text>
????</MenuItem>
????<MenuItem>
????????<Text>Help</Text>
????</MenuItem>
????<MenuItem>
????????<Text>Feature</Text>
????</MenuItem>
</MenuItems>
????string?menuPath?=?"MyFiles/Menu.xml";
????string?folderName?=?"MyFiles/";
????DataSet?ds?=?null;
????if?(Cache["Menu"]?==?null)
????{
????????ds?=?new?DataSet();
????????ds.ReadXml(Server.MapPath(menuPath));
????????//?menu?is?created
????????Cache.Insert("Menu",?ds,?new?System.Web.Caching.CacheDependency(
????????????Server.MapPath(menuPath)),DateTime.Now.AddMinutes(60),
????????????TimeSpan.Zero,
????????????System.Web.Caching.CacheItemPriority.Default,
????????????new?System.Web.Caching.CacheItemRemovedCallback(
??????????????????????????????????CacheItemRemovedCallBack));
???????DisplayCacheCreationTime("Object?was?not?in?the?cache?and?created?at:",
?????????????DateTime.Now.ToLongTimeString());
????}
????else
????{
????????//?menu?is?created?from?the?cache
????????DisplayCacheCreationTime("Object?was?in?the?cache",String.Empty);
????}
我們也可以將緩存依賴于文件夾.當文件夾下的文件和子級文件夾被創建,更新,刪除的時候跟新緩存.
4:數據庫中的緩存依賴
<connectionStrings>
????<add?name="ConnectionString"
?????????connectionString="Server=localhost;Database=School;
Trusted_Connection=true"/>
</connectionStrings>
<system.web>
????<caching>
????????<sqlCacheDependency?pollTime="10000"?enabled="true"?>
????????????<databases>
????????????????<add?connectionStringName="ConnectionString"?name="School"/>
????????????</databases>
????????</sqlCacheDependency>
????</caching></caching>
????if?(Cache["Users"]?==?null)
????{
????????//?Create?the?cache?dependency
????????SqlCacheDependency?dep?=?new?SqlCacheDependency("School",?"Users");
????????string?connectionString?=?ConfigurationManager.ConnectionStrings[
????????????????????????????????????????"ConnectionString"].ConnectionString;
????????SqlConnection?myConnection?=?new?SqlConnection(connectionString);
????????SqlDataAdapter?ad?=?new?SqlDataAdapter("SELECT?FirstName,?LastName?"?+
???????????????????????????????????????????????"FROM?Users",?myConnection);
????????DataSet?ds?=?new?DataSet();
????????ad.Fill(ds);
????????//?put?in?the?cache?object
????????Cache.Insert("Users",?ds,?dep);
????}
????gvUsers.DataSource?=?Cache["Users"]?as?DataSet;
????gvUsers.DataBind();
SqlCacheDependency dep = new SqlCacheDependency("School", "Users"); 這句話用于創建一個與數據庫School中表Users關聯的緩存.當我們對Users進行INSERT, DELETE, UPDATE操作的時候緩存會被移出(Cache["Users"]==null ).
這部分代碼適用于sql2000,在sql2005下沒有這么麻煩.回頭我們再討論sql2005下的緩存.
轉載于:https://www.cnblogs.com/tommyli/archive/2008/01/23/1049696.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結