天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

asp.net SAF 中緩存服務的實現第1/5頁

復制代碼 代碼如下:
protected void Page_Load(object sender, EventArgs e)    
{    
    webinfo info = new webinfo();    
    Response.Write("有static的執行結果:" + webinfo.a + "<br />");    
    Response.Write("沒有static的執行結果:" + info.b);    
}    

public class webinfo    
{    
    public static DateTime a = DateTime.Now;    
    public DateTime b = DateTime.Now;    
}   

下面內容多摘自該文章:結果是只要站點不重啟(代碼也不修改),那么a的值是恒定不變的,即使將頁面關了重新打開也一樣;而b則是刷新就變化。如果你從事ASP.NET的開發,提起緩存你可能首先會想到Output Cache、數據源緩存或者是基于System.Web.Caching.Cache的對象緩存。實際上緩存的目的就是把對象(數據)存儲在內存中,不用每次需要對象服務的時候都重新創建對象(相對耗時)。將對象聲明為static,那么對象將在其所屬的類被載入AppDomain時初始化,這樣對象的生命周期與AppDomain同樣長,從而起到緩存的目的。

設計思想 
       我們經常需要在應用程序中緩存一些常用數據供全局使用以提升性能。如果需要緩存的對象類型和數目是固定的,我們可能會直接將其聲明為static;如果我們需要緩存的對象類型和數目是不定的,我們可能會借助一個static Hashtable來實現。但是Hashtable有個缺陷:它沒有層次結構,它總是以鍵/值的形式來存儲數據,一個Key對應一個Value,如果我們想獲取相關聯的一組數據就會比較困難了。 

       XML文檔結構是樹形的,具有標準的層次結構。XPath用于從Xml文檔中選擇一個或多個結點。比如 "/BookStore/Book",選擇Book結點下的所有子結點。 

       SAF 中的緩存服務通過一個在內存中動態構造的Xml文檔樹作為橋梁,將靜態(static)緩存和XPath 這兩個技術結合了起來,支持使用XPath的語法來獲取Hashtable中對象。其中靜態緩存進行實際的數據緩存,XPath用于獲取數據對象。從程序員的角度來看,即是Hashtable的Key支持了XPath的語法,可以將原本“平板式”的Hashtable想象成為一個“樹形結構”,它的結點包含了緩存的數據,我們通過標準的XPath到達結點(當然這只是一個假象)并獲取數據。通過這種方式就可以使用XPath來一次獲取Hashtable中的多個相關數據對象。 簡單說,SAF緩存服務是為了實現一個有層次(樹形)的緩存結構,從而實現對緩存更加靈活的操作。

而實際上是怎么實現這一過程的呢?我們一步步來看:
1、首先在內存中動態構建一個 Xml文檔,它只包含一個根結點,可以任意命名,這里將它命名為了Cache。
2、提供一個Xpath路徑:獲取對象(數據)前首先要存儲對象,存對象自然要先提供一個路徑(這里稱為“路徑”,是因為它是一個XPath,實際上也就相當于Hashtable中的鍵Key)。
3、根據上一步提供的路徑,以Cache為根結點,逐層深入地創建XmlNode結點。
4、生成一個GUID,在葉結點上添加一個Key屬性,為這個Key屬性賦值為GUID。
5、在Hashtable中存儲對象,其中Hashtable的Key即為上一步生成的GUID,而Value為要存儲的對象。

       使用這種方式,Hashtable的實際的Key,即動態生成的GUID對程序員來說是透明的,程序員在存儲/獲取對象時,只需要提供XPath表達式就可以。下面這幅圖說明了它們之間的關系:

這里還需要再說明三點:
1、我們使用Hashtable存儲對象,可以直接將Hashtable聲明為static的,也可以將Hashtable聲明為instance的,但是將Hashtable所屬的對象聲明為static的。這里應用了Singleton模式,先將對Hashtable的操作封裝成一個類,然后在這個類上應用Singleton模式,確保了這個類只有一個(這個類所維護的Hashtable實例自然也只有一個了)。很明顯,這個類包含了主要的邏輯,我們將之命名為Cache。
2、使用Hashtable的好處是可以存儲任何類型的對象,缺點是喪失了類型安全。有時候我們可能會想使用一個泛型集合類來取代Hashtable,比如Dictionary<T key, T value>。所以這里又引入了Strategy模式,創建了一個ICacheStrategy接口,這個接口包括三個方法,分別用于添加、獲取、刪除對象。
3、用Xpath獲取結點時,可以是基于當前結點的相對路徑;也可以是基于根結點的絕對路徑。在本文的范例程序中,使用的是絕對路徑,顯然這樣更加方便一些。

AspNet技術asp.net SAF 中緩存服務的實現第1/5頁,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 妹妹成人网 | 午夜伦理:伦理片 | 16女下面流水不遮图免费观看 | 久久久精品久久久久三级 | 欧美精品九九99久久在免费线 | 上课失禁丨vk | 亚洲国产无线码在线观看 | 中文字幕一区中文亚洲 | 亚洲精品白色在线发布 | 精品区2区3区4区产品乱码9 | jjzz韩国| 精品国产乱码久久久久久免费流畅 | 俄罗斯14一18处交 | 好男人资源免费观看1 | 乳女教师欲乱动漫无修版动画 | 好看的电影网站亚洲一区 | 99热久久视频只有精品6 | 久久人妻少妇嫩草AV蜜桃35I | 亚洲成 人a影院青久在线观看 | 久久久精品久久久久特色影视 | 久久伊人青青 | 午夜影视不用充钱的免费 | 扒开黑女人p大荫蒂老女人 扒开粉嫩的小缝末成年小美女 | 一本道色综合手机久久 | 久久爽狠狠添AV激情五月 | 日韩免费一区二区三区在线 | 一天不停的插BB十几次 | 精品一二三区久久AAA片 | 最新精品学生国产自在现拍 | 亚洲色婷婷久久精品AV蜜桃 | 性刺激欧美三级在线现看中文 | seyeye免费高清观看 | 乱h好大噗嗤噗嗤烂了 | 91麻豆精品一二三区在线 | 人妻插B视频一区二区三区 人妻 中文无码 中出 | 久久精品国产只有精品 | jizz黑丝 | 亚洲第一页在线播放 | 古代荡乳尤物H妓女调教 | 国产午夜a理论毛片在线影院 | 秋霞电影网午夜免费鲁丝片 |