国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

C#緩存學(xué)習(xí)總結(jié)

2019-11-14 16:31:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

昨天整理了一下緩存的基本用法,和緩存依賴(lài)類(lèi) CacheDependency類(lèi)的使用,今天整理一下緩存的數(shù)據(jù)庫(kù)依賴(lài)類(lèi)SqlCacheDependency

1、數(shù)據(jù)庫(kù)依賴(lài)類(lèi)SqlCacheDependency

數(shù)據(jù)庫(kù)緩存依賴(lài)主要解決的是當(dāng)數(shù)據(jù)庫(kù)的內(nèi)容發(fā)生改變時(shí),如何及時(shí)通知緩存,并更新緩存中的數(shù)據(jù)的問(wèn)題。

語(yǔ)法定義:

SqlCacheDependency類(lèi)主要的構(gòu)造函數(shù)如下:

public SqlCacheDependency(string database,string table)

其中參數(shù)一代表要啟用緩存的數(shù)據(jù)庫(kù),參數(shù)二表示緩存的表。在實(shí)際使用過(guò)程中,只需要指明緩存的數(shù)據(jù)庫(kù)和表即可。

方法是屬性的應(yīng)用(代碼于CacheDependency類(lèi)似),不過(guò)Sql需要先進(jìn)行一下對(duì)web.config進(jìn)行配置和設(shè)置數(shù)據(jù)庫(kù)的緩存配置一下才可以使用SqlCacheDependency緩存類(lèi)

第一步web.config配置如下:

 <!--連接數(shù)據(jù)庫(kù)語(yǔ)句--><configuration>  <connectionStrings>    <add name="Config" connectionString="Data Source=.;Initial Catalog=CacheData;Persist Security Info=True;User ID=sa;PassWord=123" 

 2、Vs緩存配置:

 打開(kāi)“開(kāi)始”|“所有程序”|“Microsoft Visual Studio 2010”|“Visual Studio Tools”|“Visual Studio 2010命名提示”菜單命令。

 在命令框內(nèi)輸入:aspnet_regsql.exe -S  SqlServer服務(wù)器  -U <Username> -P <Password> -ed -d 數(shù)據(jù)庫(kù)名稱(chēng) -et -t 表名

  若無(wú)身份驗(yàn)證輸入:aspnet_regsql.exe -S  SqlServer服務(wù)器  -ed -d 數(shù)據(jù)庫(kù)名稱(chēng) -et -t 表名

 執(zhí)行命令即可;

3、頁(yè)面代碼;

 private static SqlCacheDependency MyDep;        protected void Page_Load(object sender, EventArgs e)        {            Label1.Text = DateTime.Now.ToString();            if (!IsPostBack)            {                //Cache為數(shù)據(jù)庫(kù)名,T_SqlCache為緩存表                               DataSet ds = GetSet();                if (Cache["SqlCon"] == null)                {                    //添加緩存SqlCon,緩存值為數(shù)據(jù)庫(kù)表內(nèi)容,                    MyDep = new SqlCacheDependency("Cache", "T_SqlCache");                    Cache.Add("SqlCon", ds, MyDep, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null);                }                            }        }                 protected void Button1_Click(object sender, EventArgs e)        {            if (MyDep.HasChanged)            {//當(dāng)數(shù)據(jù)庫(kù)值更改時(shí)提醒;                Response.Write("數(shù)據(jù)庫(kù)修改時(shí)間為:"+MyDep.UtcLastModified);            }            if (Cache["SqlCon"] == null)            {//當(dāng)緩存過(guò)期或數(shù)據(jù)庫(kù)值修改后緩存從新加載                MyDep = new SqlCacheDependency("Ajax", "T_AjaxLD");                DataSet ds = GetSet();                Cache.Add("SqlCon", ds, MyDep, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null);            }            this.GridView1.DataSource = Cache["SqlCon"];//綁定數(shù)據(jù)            this.GridView1.DataBind();        }        /// <summary>        /// 生成Dataset        /// </summary>        /// <returns></returns>        private DataSet GetSet()        {            DataSet ds = new DataSet();            string sql = "select * from T_SqlCache";            string Config = ConfigurationManager.ConnectionStrings["Config"].ConnectionString;//連接數(shù)據(jù)庫(kù)語(yǔ)句            using (SqlConnection cnn = new SqlConnection(Config))            {                using (SqlCommand cmm = new SqlCommand(sql, cnn))                {                    SqlDataAdapter dapter = new SqlDataAdapter(cmm);                    dapter.Fill(ds);                }            }            return ds;        }

C#緩存基本內(nèi)容就差不多這些,一些實(shí)踐的應(yīng)用等一會(huì)用到在總結(jié)出來(lái),地下順便轉(zhuǎn)載一些session和Cache的區(qū)別:

 Session和Cache的區(qū)別

以前實(shí)現(xiàn)數(shù)據(jù)的緩存有很多種方法,有客戶(hù)端的Cookie,有服務(wù)器端的Session和application。其中Cookie是保存在客戶(hù)端的一組數(shù)據(jù),主要用來(lái)保存用戶(hù)名等個(gè)人信息。Session則保存對(duì)話(huà)信息。Application則是保存在整個(gè)應(yīng)用程序范圍內(nèi)的信息,相當(dāng)于全局變量。通常使用最頻繁的是Session,那么Session和Cache又有什么區(qū)別呢?

本節(jié)結(jié)合使用經(jīng)驗(yàn),詳細(xì)介紹Session緩存和Cache緩存的區(qū)別。

(1)最大的區(qū)別是Cache提供緩存依賴(lài)來(lái)更新數(shù)據(jù),而Session只能依靠定義的緩存時(shí)間來(lái)判斷緩存數(shù)據(jù)是否有效。

(2)即使應(yīng)用程序終止,只要Cache.Add方法中定義的緩存時(shí)間未過(guò)期,下次開(kāi)啟應(yīng)用程序時(shí),緩存的數(shù)據(jù)依然存在。而Session緩存只是存在于一次會(huì)話(huà)中,會(huì)話(huà)結(jié)束后,數(shù)據(jù)也就失效了。

(3)Session容易丟失,導(dǎo)致數(shù)據(jù)的不確定性,而Cache不會(huì)出現(xiàn)這種情況。

(4)由于Session是每次會(huì)話(huà)就被加載,所以不適宜存放大量信息,否則會(huì)導(dǎo)致服務(wù)器的性能降低。而Cache則主要用來(lái)保存大容量信息,如數(shù)據(jù)庫(kù)中的多個(gè)表。

(5)VS2005的測(cè)試版提供了將緩存保存在硬盤(pán)上的參數(shù),但正式版中取消了這個(gè)功能,估計(jì)其在以后版本中會(huì)重新實(shí)現(xiàn)。而Session目前只能保存在內(nèi)存中,對(duì)其性能有影響。

為了提高Cache的有效利用率,建議對(duì)于不經(jīng)常改動(dòng)的數(shù)據(jù)使用Cache。

  


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙山县| 长顺县| 巴塘县| 沿河| 美姑县| 称多县| 特克斯县| 北安市| 大安市| 龙江县| 雅江县| 新野县| 东乡族自治县| 柘城县| 宿迁市| 随州市| 定兴县| 民勤县| 绥阳县| 岳西县| 建始县| 西乡县| 康乐县| 刚察县| 武夷山市| 县级市| 新乐市| 永昌县| 绿春县| 尤溪县| 韩城市| 郓城县| 广平县| 东莞市| 临夏市| 鄯善县| 清远市| 绍兴市| 阿克苏市| 黄陵县| 克山县|