1. 程式人生 > >HttpContext.Current.Cache 和HttpRuntime.Cache的區別

HttpContext.Current.Cache 和HttpRuntime.Cache的區別

 

先看MSDN上的解釋:
      HttpContext.Current.Cache:為當前 HTTP 請求獲取Cache物件。
      HttpRuntime.Cache:獲取當前應用程式的Cache。
      我們再用.NET Reflector工具看看HttpContext.Cache和HttpRuntime.Cache的實現:

HttpContext.Cache和HttpRuntime.Cache實現
    //System.Web.HttpContext.Cache屬性實現
    public sealed class HttpContext
    {
        public Cache Cache
        {
            get
            {
                return HttpRuntime.Cache;
            }
        }
    }


    //System.Web.HttpRuntime.Cache屬性實現
    public sealed class HttpRuntime
    {
        public static Cache Cache
        {
            get
            {
                if (AspInstallDirectoryInternal == null)
                {
                    throw new HttpException(SR.GetString("Aspnet_not_installed", new object[] { VersionInfo.SystemWebVersion }));
                }
                Cache cache = _theRuntime._cachePublic;
                if (cache == null)
                {
                    CacheInternal cacheInternal = CacheInternal;
                    CacheSection cacheSection = RuntimeConfig.GetAppConfig().Cache;
                    cacheInternal.ReadCacheInternalConfig(cacheSection);
                    _theRuntime._cachePublic = cacheInternal.CachePublic;
                    cache = _theRuntime._cachePublic;
                }
                return cache;
            }
        }
    }

       通過上面的程式碼我們可以看出:HttpContext.Current.Cache是呼叫HttpRuntime.Cache實現的,兩者指向同一Cache物件。那麼兩者到底有沒有區別的?既然兩個指向的是同一Cache物件,兩者的差別只能出現在HttpContext和HttpRuntime上了。我們再來看看MSDN中HttpContext和HttpRuntime的定義。
      HttpContext:封裝有關個別HTTP請求的所有HTTP特定的資訊,HttpContext.Current為當前的HTTP請求獲取HttpContext物件。
      HttpRuntime:為當前應用程式提供一組ASP.NET執行時服務。

      由上面的定義可以看出:HttpRuntime.Cache相當於就是一個快取具體實現類,這個類雖然被放在了System.Web名稱空間下,但是非Web應用下也是可以使用;HttpContext.Current.Cache是對上述快取類的封裝,由於封裝到了HttpContext類中,侷限於只能在知道HttpContext下使用,即只能用於Web應用。

      下面的例子可以很好的說明這一點:

HttpContext.Cache和HttpRuntime.Cache的示例
    class CacheTest
    {
        static void Main(string[] args)
        {      
            System.Web.Caching.Cache httpRuntimeCache = System.Web.HttpRuntime.Cache;
            httpRuntimeCache.Insert("httpRuntimeCache", "I am stored in HttpRuntime.Cache");

            if (httpRuntimeCache != null)
            {
                Console.WriteLine("httpRuntimeCache:" + httpRuntimeCache["httpRuntimeCache"]);
            }

            System.Web.HttpContext httpContext = System.Web.HttpContext.Current;
            if (httpContext == null)
            {
                Console.WriteLine("HttpContext object is null in Console Project");
            }
            else
            {
                System.Web.Caching.Cache httpContextCache = httpContext.Cache;
                httpContextCache.Insert("httpContextCache", "I am stored in HttpRuntime.Cache");
                if (httpContextCache == null)
                {
                    Console.WriteLine("httpContextCache is null");
                }
            }
            
            Console.ReadLine();
        }
    }

      輸出結果:httpRuntimeCache:I am stored in HttpRuntime.Cache
      HttpContext object is null in Console Project

      綜上:我們在使用Cache時,儘量使用HttpRuntime.Cache,既能減少出錯,也減少了一次函式呼叫。

      參考資料:HttpRuntime.Cache 與HttpContext.Current.Cache的疑問,HttpRuntime.Cache vs. HttpContext.Current.Cache

相關推薦

HttpContext.Current.Cache HttpRuntime.Cache區別

  先看MSDN上的解釋:       HttpContext.Current.Cache:為當前 HTTP 請求獲取Cache物件。       HttpRuntime.Cache:獲取當前應用程式的Cache。       我們再用.NET Reflector工具看看

HttpContext.Current.Session Session 的區別

使用 pro 啟動 protect and con 動作 system ont Session(會話)通常指一個動作從開始到結束不間斷的一個動作。 例如“打電話”,通常是“1.拿起電話--2.撥對方號碼--3.對方截圖--4.掛機&rd

CacheSession的區別

加載 body AD 定性 post session 應用 結束 失效 Cache和Session的區別: 1、Cache即使應用程序終止,只要Cache.Add方法中定義的緩存時間未過期,下次開啟應用程序時,緩存的數據依然存在。而Session緩存只是存在於一次會話中,會

【轉】Buffer cachepage cache區別

轉自:http://alanwu.blog.51cto.com/3652632/1122077 Page cache和buffer cache到底有什麼區別呢?很多時候我們不知道系統在做IO操作的時候到底是走了page cache還是buffer cache?其實

cachebuffer的區別

1.cache是為了彌補高速裝置和低速裝置的鴻溝而引入的中間層,最終起到“加快訪問速度”的作用。 2.buffer的主要目的進行流量整形,把突發的大數量較小規模的I/O整理成平穩的小數量較大規模的I/

每次進步一點點——spark中cachepersist的區別

昨天面試被問到了cache和persist區別,當時只記得是其中一個呼叫了另一個,但沒有回答出二者的不同,所以回來後重新看了原始碼,算是弄清楚它們的區別了。 cache和persist都是用於將一個RDD進行快取的,這樣在之後使用的過程中就不需要重新計算了,可

linux Page cachebuffer cache正解

Page cache和buffer cache一直以來是兩個比較容易混淆的概念,在網上也有很多人在爭辯和猜想這兩個cache到底有什麼區別,討論到最後也一直沒有一個統一和正確的結論,在我工作的這一段時間,page cache和buffer cache的概念曾經困擾過我,但是仔細分析一下,這兩個概念實際上非常的

Linux Page cachebuffer cache深入理解

Page cache和buffer cache一直以來是兩個比較容易混淆的概念,在網上也有很多人在爭辯和猜想這兩個cache到底有什麼區別,討論到最後也一直沒有一個統一和正確的結論,在我工作的這一段時間,page cache和buffer cache的概念曾經困擾過我,但是仔細分析一下,這兩個概念實際上非常的

I-CacheD-cache

兩者的區別: 一方面是cache的行為。Icache大多都是順序取指,碰到分支指令也會跳轉,而Dcache訪問的模式變化比較大.也就是前者所說的pattern的問題.指令只有讀和refill沒有寫,而資料有讀也有寫.最重要的是馮氏的結構是指令和資料分離.I和

HttpContext.Current.Cache 過期時間

dds ceo close logutil 依賴項 rop exp ons valid 為了更快的讀取數據,我們一般會把常用到的數據加載到Cache中 在.NET中,Cache的存在可以依賴多中方式,主要用到HttpContext.Current.Cache類 在這裏,我主

緩存(cache)和緩沖(buffer)區別實現

圖片 數據結構 分享 enc 作用 ech shadow vpd mar 緩存和緩沖都是一種數據結構,但是其作用不一樣,緩存一般可以用map實現,但是緩沖一般應用queue實現。以下對比了兩者區別: ? 參考:https://en.wikipedia.org/wiki/

buffercache有什麼本質區別

在free命令展示機器的記憶體消耗情況,會像這樣展示 buffered 和cached本質內容有什麼區別呢?  我沒搞明白。我覺得需要追根溯源會更加理解本質。 英文是這樣解釋 A buffer is something that has yet to be "wri

記憶體、cache暫存器之間的關係及區別

cache是一個高速小容量的臨時儲存器,可以用高速的靜態儲存器晶片實現,或者整合到CPU晶片內部,儲存CPU最經常訪問的指令或者操作資料。而暫存器不同,暫存器是記憶體階層中的最頂端,也是系統獲得操作資料的最快速途徑。三者之間的順序就是 :記憶體-cahe-暫存器此外,暫存器

計算機中記憶體、cache暫存器之間的關係及區別

1. 暫存器是中央處理器內的組成部份。暫存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、資料和位址。在中央處理器的控制部件中,包含的暫存器有指令暫存器(IR)和程式計數器(PC)。在中央處理器的算術及邏輯部件中,包含的暫存器有累加器(ACC)。 2. 記憶體包含的範圍

文件系統中的journal devicewrite cache

文件系統 journal device write cache 眾所周知,文件系統中的journal device主要有兩個目的:1.保證數據的一致性;2.縮短寫響應時間要保證數據的一致性,當然避免不了和磁盤write cache的交互,這體現在兩個層次:1.文件系統中對journal devic

HttpRuntime.Cache .Net自帶的緩存類

name http .get while cal enum author timespan datetime 1 using System; 2 using System.Collections; 3 using System.Web; 4 using S

apt-getapt-cache命令實例展示

grub 目錄 特定 p s form transport urg virtual linu 示例:1 列出所有可用包 [email protected]/* */:~$ apt-cache pkgnamesaccount-plugin-yahoojpceph-

HttpRuntime.Cache操作實例

.com strong time image ron logs 序列 alt http 功能描述 字符串常規操作 序列化操作 代碼截圖 購買詳詢:QQ 506023315,只要10元(屌絲籌房中) HttpRuntime.Cache操作實例

嵌入式開發之hi3519--- pcie dmadma cache 緩存更新sync memery

www. -- 管理 緩存 con 嵌入 內存 pin sta http://blog.csdn.net/likeping/article/details/42235111 linux下dma 管理 http://blog.csdn.net/skyflying2012/a

cache buffer

等待時間 了解 blog root https 數量 再次 相等 ping 順序:cpu---cache---mem(內存)---buffer---hard drive(硬盤) cached是cpu與內存間的,buffer是內存與磁盤間的,都是為了解決速度不對等的問題 ca