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
Cache和Session的區別
加載 body AD 定性 post session 應用 結束 失效 Cache和Session的區別: 1、Cache即使應用程序終止,只要Cache.Add方法中定義的緩存時間未過期,下次開啟應用程序時,緩存的數據依然存在。而Session緩存只是存在於一次會話中,會
【轉】Buffer cache和page cache的區別
轉自:http://alanwu.blog.51cto.com/3652632/1122077 Page cache和buffer cache到底有什麼區別呢?很多時候我們不知道系統在做IO操作的時候到底是走了page cache還是buffer cache?其實
cache和buffer的區別
1.cache是為了彌補高速裝置和低速裝置的鴻溝而引入的中間層,最終起到“加快訪問速度”的作用。 2.buffer的主要目的進行流量整形,把突發的大數量較小規模的I/O整理成平穩的小數量較大規模的I/
每次進步一點點——spark中cache和persist的區別
昨天面試被問到了cache和persist區別,當時只記得是其中一個呼叫了另一個,但沒有回答出二者的不同,所以回來後重新看了原始碼,算是弄清楚它們的區別了。 cache和persist都是用於將一個RDD進行快取的,這樣在之後使用的過程中就不需要重新計算了,可
linux Page cache和buffer cache正解
Page cache和buffer cache一直以來是兩個比較容易混淆的概念,在網上也有很多人在爭辯和猜想這兩個cache到底有什麼區別,討論到最後也一直沒有一個統一和正確的結論,在我工作的這一段時間,page cache和buffer cache的概念曾經困擾過我,但是仔細分析一下,這兩個概念實際上非常的
Linux Page cache和buffer cache深入理解
Page cache和buffer cache一直以來是兩個比較容易混淆的概念,在網上也有很多人在爭辯和猜想這兩個cache到底有什麼區別,討論到最後也一直沒有一個統一和正確的結論,在我工作的這一段時間,page cache和buffer cache的概念曾經困擾過我,但是仔細分析一下,這兩個概念實際上非常的
I-Cache和D-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/
buffer和cache有什麼本質區別
在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 device和write 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-get和apt-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 dma和dma 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