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

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

[.net 面向?qū)ο蟪绦蛟O(shè)計進階] (15) 緩存(Cache)(二) 利用緩存提升程序性能

2019-11-17 02:12:05
字體:
供稿:網(wǎng)友

[.net 面向?qū)ο蟪绦蛟O(shè)計進階] (15) 緩存(Cache)(二) 利用緩存提升程序性能

[.net面向?qū)ο蟪绦蛟O(shè)計進階](15)緩存(Cache)(二)利用緩存提升程序性能

本節(jié)導讀:

上節(jié)說了緩存是以空間來換取時間的技術(shù),介紹了客戶端緩存和兩種常用服務(wù)器緩布,本節(jié)主要介紹一種.NET中特別重要的緩布技術(shù)Cache.利用Cache提升程序性能。

1. 緩存Cache的命名空間

.NET中對緩存有兩個命名空間

命名空間1:System.Web.Caching

命名空間2:System.Runtime.Caching

引用范圍:這兩個命名空間,都可以在Web和非WEB應(yīng)用程序中引用.

生命周期:理論上來說是一直存在,我們可以設(shè)置過期時間。但當內(nèi)存開銷緊張的時候,也會清理緩存釋放空間。因此我們后面的程序應(yīng)用中會判斷Cache的對象是否存在,不存在的情況下,重新創(chuàng)建來解決失效問題。

下面介紹一下緩存的具體使用方法。

2. 創(chuàng)建和讀取緩存

緩存也是對向?qū)ο蟮模覀兿葎?chuàng)建一個實體類,還是比較熟悉的“武功高手”類:

/// <summary>/// 類:武林高手/// MartialArtsMaster/// </summary>    public class MartialArtsMaster{    /// <summary>    /// 編號    /// </summary>    public int id { get; set; }    /// <summary>    /// 姓名    /// </summary>    public string name { get; set; }    /// <summary>    /// 門派    /// </summary>    public string menpai { get; set; }               /// <summary>    /// 武功    /// </summary>    public string kongFu { get; set; }}

下面我們創(chuàng)建一個緩存,并讀緩存,遍歷對象

//增加幾個武林高手List<MartialArtsMaster> masterList = new List<MartialArtsMaster>() {    new MartialArtsMaster(){ id=1, name="段譽", menpai="天龍寺", kongFu="六脈神劍"},    new MartialArtsMaster(){ id=2, name="喬峰", menpai="丐幫", kongFu="降龍十八掌"},    new MartialArtsMaster(){ id=3, name="虛竹", menpai="逍遙派", kongFu="北冥神功"}};//緩存的創(chuàng)建System.Web.Caching.Cache objCache = Htt

運行結(jié)果如下:

3. 常見的緩存在工廠反射模式中的應(yīng)用

我們這里先不討論設(shè)計模式,但是在使用很多代碼生成器的時候,對于工廠反射模式動態(tài)創(chuàng)建多個數(shù)據(jù)層接口時,常常使用了緩存技術(shù),將動態(tài)反射創(chuàng)建的類緩存起來,提高下次訪問效率。

下面是簡單工廠反射模式中的緩存應(yīng)用代碼片段:

object objType = GetCache(ClassName);//從緩存讀取if (objType == null){    try    {        objType = Assembly.Load(AssemblyPath).CreateInstance(ClassName);//反射創(chuàng)建        SetCache(ClassNamespace, objType);// 寫入緩存    }    catch(Exception ex)    { }}

4. 緩存的使用原則

緩存有效的提高了程序效率,但也要合理使用,下面是幾種使用的原則:

第一,數(shù)據(jù)可能會被頻繁的被使用,這種數(shù)據(jù)可以緩存。

第二,數(shù)據(jù)的訪問頻率非常高,或者一個數(shù)據(jù)的訪問頻率不高,但是它的生存周期很長,這樣的數(shù)據(jù)最好也緩存起來。

第三是在asp.net中,如果緩存過大的話也會報內(nèi)存溢出錯誤,特別是如果緩存大的DataSet對象的時候。

根據(jù)實際情況來合理利用。如:cache用得過多也會增大服務(wù)器的壓力。整頁輸出緩存,又會影響數(shù)據(jù)的更新。如果真的需要緩存很大量的數(shù)據(jù),可以考慮靜態(tài)技術(shù)。

5. 通用緩存類

最后慣例,整理一個緩存的通用類,以供小伙伴們調(diào)用

命名空間:KaJiMao.Common

類名:CacheHelper

文件名:CacheHelper.cs

using System;using System.Web;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace KaJiMao.Common{    /// <summary>    /// Cache通用類    /// Yubinfeng    /// Date:2015/07/16    public class CacheHelper    {        /// <summary>        /// 獲取數(shù)據(jù)緩存        /// </summary>        /// <param name="CacheKey">鍵</param>        public static object GetCache(string CacheKey)        {            System.Web.Caching.Cache objCache = HttpRuntime.Cache;            return objCache[CacheKey];        }        /// <summary>        /// 設(shè)置數(shù)據(jù)緩存        /// </summary>        public static void SetCache(string CacheKey, object objObject)        {            System.Web.Caching.Cache objCache = HttpRuntime.Cache;            objCache.Insert(CacheKey, objObject);        }        /// <summary>        /// 設(shè)置數(shù)據(jù)緩存        /// </summary>        public static void SetCache(string CacheKey, object objObject, TimeSpan Timeout)        {            System.Web.Caching.Cache objCache = HttpRuntime.Cache;            objCache.Insert(CacheKey, objObject, null, DateTime.MaxValue, Timeout, System.Web.Caching.CacheItemPriority.NotRemovable, null);        }        /// <summary>        /// 設(shè)置數(shù)據(jù)緩存        /// </summary>        public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)        {            System.Web.Caching.Cache objCache = HttpRuntime.Cache;            objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);        }        /// <summary>        /// 移除指定數(shù)據(jù)緩存        /// </summary>        public static void RemoveAllCache(string CacheKey)        {            System.Web.Caching.Cache _cache = HttpRuntime.Cache;            _cache.Remove(CacheKey);        }        /// <summary>        /// 移除全部緩存        /// </summary>        public static void RemoveAllCache()        {            System.Web.Caching.Cache _cache = HttpRuntime.Cache;            IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();            while (CacheEnum.MoveNext())            {                _cache.Remove(CacheEnum.Key.ToString());            }        }    }}
View Code

==============================================================================================

返回目錄

<如果對你有幫助,記得點一下推薦哦,如有有不明白或錯誤之處,請多交流>

<對本系列文章閱讀有困難的朋友,請先看《.net面向?qū)ο缶幊袒A(chǔ)》>

<轉(zhuǎn)載聲明:技術(shù)需要共享精神,歡迎轉(zhuǎn)載本博客中的文章,但請注明版權(quán)及URL>

.NET 技術(shù)交流群:467189533 .NET 程序設(shè)計

==============================================================================================


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 昌黎县| 乌兰浩特市| 利川市| 股票| 手游| 新建县| 天台县| 桃园市| 北安市| 卢龙县| 化州市| 玉田县| 来安县| 阳山县| 南宫市| 高碑店市| 晴隆县| 义乌市| 彩票| 公安县| 即墨市| 绥芬河市| 临洮县| 泗阳县| 宜兰市| 永顺县| 安西县| 灌云县| 类乌齐县| 峡江县| 平顶山市| 宣城市| 峨眉山市| 乌恰县| 高雄县| 江华| 祁东县| 宁都县| 基隆市| 上高县| 平塘县|