天天看點

關于WinForm/Web如何使用緩存Cach

Cache 的絕對到期與滑動到期

絕對到期:設定絕對過期時間 到了指定時間以後會失效。(類似Cookie機制)

相對到期也稱滑動到期:設定相對過期時間 指定時間内無通路會失效。(類似Session機制)

HttpRuntime.Cache與HttpContext.Current.Cache 為同一個對象

HttpRuntime.Cache.Add 存在相同的鍵會異常,傳回緩存成功的對象 HttpRuntime.Cache.Insert存在相同的鍵會替換無傳回值

HttpRuntime.Cache["key"] 使用字典的方式也可以讀取和設定

HttpRuntime.Cache.Insert(key, value, null, DateTime.Now.AddSeconds(seconds), TimeSpan.Zero); //設定絕對過期時間 到了指定時間以後會失效 ps: TimeSpan.Zero == System.Web.Caching.Cache.NoSlidingExpiration

HttpRuntime.Cache.Insert(key,

value, null, DateTime.MaxValue, TimeSpan.FromSeconds(seconds)); //設定相對過期時間 指定時間内無通路會失效 ps: DateTime.MaxValue == System.Web.Caching.Cache.NoAbsoluteExpiration

  

對于每個應用程式域均建立該類的一個執行個體,并且隻要對應的應用程式域保持活動,該執行個體便保持有效。

關于WinForm/Web如何使用緩存Cach

注意:

Cache 類不能在 ASP.NET 應用程式外使用。它是為在 ASP.NET 中用于為 Web 應用程式提供緩存而設計和測試的。在其他類型的應用程式(如控制台應用程式或 Windows 窗體應用程式)中,ASP.NET 緩存可能無法正常工作。

System.Web.Caching是用來管理緩存的命名空間,其父級空間是System.Web,由此可見,緩存通常用于Web網站的開發,包括在B/S項目中的開發。

緩存的設計主要是考慮到網絡帶寬可能會延緩資料的送出與回發,如果把資料儲存在用戶端,使用者就可以直接從用戶端讀取資料,減少用戶端與伺服器端的資料互動,提高程式的性能。

那麼System.Web.Caching可以使用到WinForm程式中嗎?

如果用的是winform,基本上不用想這個問題,因為你的程式本身就在記憶體裡運作着。winfrom 直接用記憶體用 資料字典如果是

web,緩存就是将常用的資料放到伺服器的記憶體中,當有不同的客戶請求相同的資料時,直接從記憶體讀取,以此提高性能。

簡單點:WebForm是“瘦用戶端”,占用伺服器資源。WinForm是“胖客戶單”,占用的是本地用戶端記憶體。

推薦兩種寫法:

一、是web項目中如何使用。

 二、是winform程式中

 (1)靜态變量緩存:

關于WinForm/Web如何使用緩存Cach
關于WinForm/Web如何使用緩存Cach

View Code

namespace HZ

{

    using System.Collections.Generic;

    /// <summary>

    /// 全局統一的緩存類

    /// </summary>

    public class Cache

    {

        private SortedDictionary<string, string> dic = new SortedDictionary<string, string>();

        private static volatile Cache instance = null;

        private static object lockHelper = new object();

        private Cache()

        {

        }

        public void Add(string key, string value)

            dic.Add(key, value);

        public void Remove(string key)

            dic.Remove(key);

        public string this[string index]

            get

            {

                if (dic.ContainsKey(index))

                    return dic[index];

                else

                    return null;

            }

            set { dic[index] = value; }

        public static Cache Instance

                if (instance == null)

                {

                    lock (lockHelper)

                    {

                        if (instance == null)

                        {

                            instance = new Cache();

                        }

                    }

                }

                return instance;

    }

}

 (2)記憶體緩存MemoryCach:表示實作記憶體中的緩存的類型。(注意此類僅僅NET4.0以上支援)