全面认识一下.NET 4.0的缓存功能
很多關(guān)于.NET 4.0新特性的介紹,緩存功能的增強(qiáng)肯定是不會(huì)被忽略的一個(gè)重要亮點(diǎn)。在很多文檔中都會(huì)介紹到在.NET 4.0中,緩存功能的增強(qiáng)主要是在擴(kuò)展性方面做了改進(jìn),改變了原來(lái)只能利用內(nèi)存進(jìn)行緩存的局限,允許用戶(hù)在不改變代碼的情況下通過(guò)修改配置的方式,靈活的切換緩存介質(zhì)。Cache Provider是可擴(kuò)展的,開(kāi)發(fā)人員可以方便的將緩存存放在文件中,也可以擴(kuò)展使用分布式緩存。然而,由于之前已經(jīng)有System.Web.Caching.Cache這個(gè)緩存對(duì)象的存在,讓我一直對(duì).NET 4.0的新的Cache和原來(lái)已存在的System.Web.Caching.Cache的關(guān)系產(chǎn)生了一定的迷惑。通過(guò)這一兩天的研究,讓我慢慢解開(kāi)了這層迷惑。
回顧.NET 4.0以前的緩存功能
事實(shí)上,在.NET4.0以前并沒(méi)有存在一個(gè)實(shí)際意義上的.NET Framework的緩存框架,實(shí)際上它是一個(gè)專(zhuān)為ASP.NET設(shè)計(jì)的緩存框架。在ASP.NET中,緩存分為兩種:輸出緩存(Output Cache)和數(shù)據(jù)緩存。輸出緩存是用在需要對(duì)已經(jīng)生成好的頁(yè)面HTML或頁(yè)面中部分HTML(User Control)進(jìn)行緩存,減少某些靜態(tài)內(nèi)容的生成次數(shù),從而提高請(qǐng)求響應(yīng)時(shí)間。數(shù)據(jù)緩存,是開(kāi)發(fā)人員希望緩存某些常用、并且極少更新的數(shù)據(jù),讓這些數(shù)據(jù)緩存在內(nèi)存中,以減少數(shù)據(jù)的讀取次數(shù),從而提高程序的性能。而這兩種緩存都是使用System.Web.Caching.Cache來(lái)緩存數(shù)據(jù)。
System.Web.Caching.Cache
它是一個(gè)內(nèi)存緩存的實(shí)現(xiàn),并不提供緩存介質(zhì)的擴(kuò)展,數(shù)據(jù)直接緩存在內(nèi)存中。這個(gè)對(duì)象一般情況下,我們不會(huì)自己去實(shí)例化。通常在頁(yè)面里面,我們會(huì)直接使用Page.Cache進(jìn)行緩存操作,而不會(huì)去關(guān)心它是如何被實(shí)例化的。而在頁(yè)面以外的地方要使用緩存,我們可以通過(guò)全局的System.Web.Context.Current.Cache來(lái)進(jìn)行緩存操作,同樣的你還可以使用System.HttpRuntime.Cache。其實(shí)如果我們通過(guò)Reflector去追蹤這幾個(gè)對(duì)象的關(guān)系,你不難發(fā)現(xiàn)雖然有這么多地方都有Cache對(duì)象,實(shí)際上它們都是引用同一個(gè)對(duì)象,那就是HttpRuntime.Cache這個(gè)對(duì)象。特別要注意的是,System.HttpRuntime.Cache不僅僅可用于Web環(huán)境下,它也可以在任何程序中使用,包括WinForm,Console Application,但是前提是你必須引用System.Web.dll。這也就說(shuō)明了,System.Web.Caching.Cache這個(gè)對(duì)象完全是可以脫離于System.Web這個(gè)名稱(chēng)空間,而作為一個(gè)獨(dú)立的緩存框架而存在。這也是我迷惑的第一個(gè)地方:System.Web.Caching.Cache會(huì)不會(huì)改變現(xiàn)有的實(shí)現(xiàn),而直接使用新的可擴(kuò)展的緩存框架?
.NET 4.0中的緩存功能全解析
.NET 4.0的緩存功功由三部分組成:System.Runtime.Caching,System.Web.Caching.Cache和Output Cache。下面分別對(duì)這三者以及它們之前的關(guān)系進(jìn)行解析:
System.Runtime.Caching
這是在.NET 4.0中新增的緩存框架,存在于程序集System.Runtime.Caching.dll,在這份PPT中提到的System.Caching指的就是它。它是一個(gè)可擴(kuò)展的數(shù)據(jù)緩存框架,內(nèi)置提供了內(nèi)存緩存的實(shí)現(xiàn)MemoryCache。但是它在使用上卻不是那么可擴(kuò)展,除了提供ObjectCache這個(gè)抽象類(lèi)外,并沒(méi)有提供可擴(kuò)展的配置方案,我們無(wú)法通過(guò)配置方案來(lái)切換ObjectCache的實(shí)現(xiàn),我們必須在代碼里面硬編碼我們要使用的ObjectCache實(shí)現(xiàn):
?
1
ObjectCache objectCache = MemoryCache.Default;//
System.Runtime.Caching.Configuration里面的配置也是針對(duì)MemoryCache。這些配置意義在于指定每個(gè)MemoryCache實(shí)例運(yùn)行的內(nèi)存使用配額方案,和配額檢查周期。MemoryCache.Default的實(shí)例名稱(chēng)為“Default”,這樣我們就可以通過(guò)下面的配置來(lái)更改MemoryCache.Default的內(nèi)存配額:
?
1
2
3
4
5
6
7
<system.runtime.caching> 
<memoryCache> 
<namedCaches> 
<add name="Default" cacheMemoryLimitMegabytes="10" pollingInterval="00:02:00"/> 
</namedCaches> 
</memoryCache> 
</system.runtime.caching>
緩存過(guò)期策略與其它的緩存框架大同小異,與System.Web.Caching.Cache的不同只是名稱(chēng)不叫CacheDependency,而叫ChangeMonitor,并且提供了基于文件和目錄的緩存依賴(lài)策略。
System.Web.Caching.Cache
原先我一直在找答案,System.WebCaching.Cache底層是否改為使用System.Runtime.Caching,得到的結(jié)果是它沒(méi)有任何的變化。
Output Cache
Output Cache有了比較大的變化,ASP.NET 4.0之前的版本都是直接使用System.Web.Caching.Cache來(lái)緩存HTML片段。在ASP.NET 4.0中對(duì)它進(jìn)行了重新設(shè)計(jì),提供了一個(gè)OutputCacheProvider供開(kāi)發(fā)人員進(jìn)行擴(kuò)展,但是它默認(rèn)情況下,仍然使用System.Web.Caching.Cache來(lái)做做緩存。關(guān)于ASP.NET 4.0的Output Cache的使用,請(qǐng)參考ScottGU的文章。
以上,我們可以得出的結(jié)果是,System.Runtime.Caching和Output Cache是可擴(kuò)展的。并且,他們二者之間沒(méi)有任何關(guān)系,提供的擴(kuò)展接口差別也非常大,需要分別進(jìn)行實(shí)現(xiàn)。System.Runtime.Caching完全可以用于替代Enterprise Library Cache Application Block的作用,并且微軟所發(fā)布的分布式緩存框架Windows Server AppFabric應(yīng)該已經(jīng)提供了System.Runtime.Caching的擴(kuò)展。
?
?
http://www.cnblogs.com/hjf1223/archive/2010/07/16/1779148.html
轉(zhuǎn)載于:https://www.cnblogs.com/luckjason/archive/2012/08/02/2619862.html
總結(jié)
以上是生活随笔為你收集整理的全面认识一下.NET 4.0的缓存功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 原神野伏众削弱了什么?
- 下一篇: 有啥公众号可以免费看电影吗?
