緩存的概念及優缺點在這裡就不多做介紹,主要介紹一下使用的方法。 1.在ASP.NET中頁面緩存的使用方法簡單,只需要在aspx頁的頂部加上一句聲明即可: <%@ OutputCache Duration="100" VaryByParam="none" %> Duration:緩存時間(秒為單位), ...
緩存的概念及優缺點在這裡就不多做介紹,主要介紹一下使用的方法。
1.在ASP.NET中頁面緩存的使用方法簡單,只需要在aspx頁的頂部加上一句聲明即可:
<%@ OutputCache Duration="100" VaryByParam="none" %>
Duration:緩存時間(秒為單位),必填屬性
2.使用微軟自帶的類庫System.Web.Caching
新手接觸的話不建議直接使用微軟提供的類庫,因為這樣對理解不夠深刻。所以在這裡我帶大家自己寫一套緩存操作方法,這樣理解得更加清晰。
話不多說,代碼開敲。
一、首先,先模擬數據來源。新建一個類,寫一個數據操作方法(該方法耗時、耗資源)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Cache { public class DataSource { /// <summary> /// 模擬從資料庫讀取數據 /// 耗時、耗CPU /// </summary> /// <param name="count"></param> public static int GetDataByDB(int count) { Console.WriteLine("-------GetDataByDB-------"); int result = 0; for (int i = count; i < 99999999; i++) { result += i; } Thread.Sleep(2000); return result; } } }
二、編寫一個緩存操作類
2.1 構造一個字典型容器,用於存放緩存數據,許可權設為private ,防止隨意訪問造成數據不安全性
//緩存容器 private static Dictionary<string, object> CacheDictionary = new Dictionary<string, object>();
2.2 構造三個方法(添加數據至緩存容器、從緩存容器獲取數據、判斷緩存是否存在)
/// <summary> /// 添加緩存 /// </summary> public static void Add(string key, object value) { CacheDictionary.Add(key, value); } /// <summary> /// 獲取緩存 /// </summary> public static T Get<T>(string key) { return (T)CacheDictionary[key]; } /// <summary> /// 判斷緩存是否存在 /// </summary> /// <param name="key"></param> /// <returns></returns> public static bool Exsits(string key) { return CacheDictionary.ContainsKey(key); }
三、程式入口編寫測試方法
3.1 先看一下普通情況不適用緩存,它的執行效率有多慢
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Cache { class Program { static void Main(string[] args) { for (int i = 1; i < 6; i++) { Console.WriteLine($"------第{i}次請求------"); int result = DataSource.GetDataByDB(666); Console.WriteLine($"第{i}次請求獲得的數據為:{result}"); } } } }
3.2 接下來,我們編寫緩存試用方法。概念無非就是根據key前往字典容器里查找是否有相對應緩存數據,有則直接調用,沒有則生成並存入字典容器里。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Cache { class Program { static void Main(string[] args) { for (int i = 1