狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

ASP.NET保持用戶狀態的9種選擇(下)

ASP.NET保持用戶狀態的9種選擇(下)

更新時間:2019-08-23 文章作者:未知 信息來源:網絡 閱讀次數:

  ASP.NET中的新狀態容器

  前面我們提到,ASP.NET為保存用戶請求間的數據添加了幾種新的途徑。這些途徑給了你如何保持狀態信息更好的控制。這些技術的范圍可以窄到只有一個請求那么小(Context對象),也可以寬到整個Web服務器和服務器上的所有應用程序(Machine.config文件)。在多數情況下你有多種保存特定數據片的選擇--使用每個方法描述的問題和答案來決定某個對象是否適合你的需要。

  Cache

  Cache對象用于單個用戶、一組用戶或所有的用戶。這種數據為多個請求保持。它可以保持很長時間,但是不能超過應用程序重新啟動的時間,并且數據的終止基于時間或者其它的依賴關系。它可以高效率地保持大量或少量地數據。

  Cache 是ASP.NET中最"酷"的對象之一。它提供了難以置信的靈活性、通用性和性能,因此在ASP.NET應用程序中它通常是比Application或Sessions更好的保持數據的對象。本文沒有詳細介紹Cache對象的使用方法,但是仍然可以說它是一個萬能對象。與其它的集合對象相似,它是一個簡單的名稱-值集合,但是通過使用指定特定用戶的鍵值可以緩存特定用戶的值。同樣你可以緩存不同的相關數據的多個數據集,例如幾個有鍵(如fordcars 、 chevycars、gmcars)的汽車集合。Cache中的數據可以給定一個絕對的、可變的或基于文件的終止時間。它們也實現了一個回調功能,在被緩存的值從緩存中提取時被調用,這個功能很有用,因為接著你能檢查它是否為最新的數據變量,如果不是(或數據源不可用),就重新緩存被終止的值。

  添加和訪問緩存中值的語法與先前談到的相似。但是Cache給訪問集合內容的標準索引器方法作了補充,它支持多種方法,允許對被緩存數據的更多的控制。最頻繁使用的方法是Insert,它支持幾種重載,允許你指定依賴、超時值、優先級和回調。下面是一些簡單的例子:


// 給緩存添加項
Cache["myKey"] = myValue;

// 從緩存中讀取項
Response.Write(Cache["myKey"]);

// 把CacheDuration增加10秒并把項添加到緩存中
Cache.Insert("myKey",myValue, null, System.DateTime.Now.AddSeconds(10),
System.Web.Caching.Cache.NoSlidingExpiration);
 

  Cache對象的最強大的特性之一是當緩存中的某個項終止時執行回調的能力。它使用了委托或函數指針,這在本文中沒有討論。幸運的是一旦你有了某些這些技術怎樣工作的示例,就能通過簡單的剪切和粘貼在應用程序中使用它們,不需要知道委托是怎樣工作的復雜過程。有很多使用這種功能的原因,最通常的是在數據終止時用當前數據重新填充緩存,或者如果重新填充緩存的數據源不可用時恢復舊的緩存數據。

  在我的例子中,簡單地緩存了當前時間,當緩存超期的時候,我將給緩存中的字符串末尾添加一個星號(*)。在超過時間后,你能通過計算星號的數量來確定緩存超期了多少次。圖9演示了回調的重要概念,并且提供了給使用緩存建立更多功能回調程序的好模板。


private void Page_Load(object sender, System.EventArgs e)
{
 string cacheKey = "myKey";
 string data = "";
 // 檢查數據是否已經被緩存了
 if(Cache[cacheKey]==null)
 {
  // 因為數據在緩存中,所有讀取數據
  data = System.DateTime.Now.ToString();

  //建立回調委托的一個實例
  CacheItemRemovedCallback callBack =new CacheItemRemovedCallback(onRemove);

  Label1.Text = "Generated: " + data;

  Cache.Insert(cacheKey,data,null,
      System.DateTime.Now.AddSeconds(5),
      System.Web.Caching.Cache.NoSlidingExpiration,
      System.Web.Caching.CacheItemPriority.Default,
      callBack);
 }
 else
 {
  Label1.Text = "Cached: " + Cache[cacheKey].ToString();
 }
}

private void onRemove(string key, object val,CacheItemRemovedReason reason)
{
 //建立回調委托的一個實例
 CacheItemRemovedCallback callBack =new CacheItemRemovedCallback(onRemove);
    Cache.Insert(key,val.ToString() +
    "*",null,System.DateTime.Now.AddSeconds(5),Cache.NoSlidingExpiration,
    System.Web.Caching.CacheItemPriority.Default, callBack);
}
 

代碼段5.緩存回調示例

  注意代碼段中一個重要的特性是在Page_Load中使用模式(pattern)來確定是否使用緩存中的數據。當你處理緩存中的項時也可能使用這種模式。使用if語句來檢查緩存的當前內容是否為空(因為要多次引用,為緩存鍵使用了一個變量)。如果是空的,從數據源生成數據并放入緩存中。如果不是空的,從緩存中返回數據。如果數據訪問邏輯很復雜,你需要把整個if語句放入一個獨立的函數,該函數的任務是檢索數據。
Cache對象的功能比先前我們討論的大多數對象多得多。這也是ASP.NET更強大的功能之一,并且我明確地推薦閱讀關于它的更多內容。

  Context

  Context對象保持單個用戶、單個請求的數據,并且數據只在該請求期間保持。Context容器可以保持大量的數據,但是典型的情況下是保存小的數據片,因為它經常通過global.asax中的某個處理方法為每個請求實現。

  Context容器(從Page對象訪問或使用System.Web.HttpContext.Current)被提供用于保持需要在不同的HttpModules和HttpHandlers之間傳遞的值。它也可以用于保持某個完整請求的相應信息。例如,IbuySpy入口在global.asax中的Application_BeginRequest事件過程中給容器填滿了許多配置信息。注意這只在當前請求中可用,如果你希望在下一個請求中也能使用,請考慮使用ViewState。

  從Context集合中設置和獲取數據使用的語法與前面討論的其它集合對象(如Application、Sessions和 Cache)的相似。下面是兩個簡單的例子:


// 給Context添加項
Context.Items["myKey"] = myValue;

// 從Context中讀取項
Response.Write(Context["myKey"]);

 

  ViewState

  ViewState為單個用戶保持狀態信息,保持期為ASPX頁面工作時間。ViewState容器可以保持大量的數據,但是必須小心管理ViewState的大小,因為它增加了每個請求和回應的下載(download)大小。

  ViewState是ASP.NET中的一個新容器,也許你已經使用它了,但是你可能還是不了解它。這是因為所有的內建Web控件都使用ViewState在頁面回發(postback)間保持自己的值。但是你必須小心,因為它影響應用程序的性能。影響的大小依賴于回發之間使用ViewState的多少--對大多數Web窗體來說數量非常小。

  確定某個頁面上每個控件使用的ViewState的數量最簡單的方法是打開頁面追蹤并檢查每個控件負載了多少個ViewState。如果某個特定控件不需要在回發之間保持數據,請通過把EnableViewState設置為false關閉該對象的ViewState。你也可以通過在瀏覽器中查看的HTML源并檢查隱藏窗體字段__VIEWSTATE來確定某個給定的ASP.NET頁面ViewState的總共大小。注意這些內容都是使用Base64編碼的,用于放置偶然的查看和維護。ViewState也可以通過給@Page指令添加EnableViewState="false"在整個頁面中禁止。

  典型的Web窗體不需要直接維護ViewState。但是如果你建立自定義Web控件,就需要了解它是怎樣工作的,并為你的控件實現它,這樣該控件的工作方式才能與隨ASP.NET發布的Web控件同樣地工作。向ViewState讀取或寫入值都可以通過上面討論地其它集合對象的語法完成:


// 給ViewState添加項
ViewState["myKey"] = myValue;

//從Context讀取項
Response.Write(ViewState["myKey"]);
 

  當建立自定義Web控件時,你也許希望它們有ViewState的好處。這在控件的屬性層可以簡單實現。代碼段6演示了怎樣保存一個簡單的自定義控件的PersonName屬性到ViewState中,并在該控件的Render方法中使用它。


namespace MSDN.StateManagement
{
 public class HelloPerson : System.Web.UI.Control
 {
  public string PersonName
  {
   get
   {
    string s = (string)ViewState["PersonName"];
    return ((s == null) ? "" : s);
   }
   set
   {
    ViewState["PersonName"] = value;
   }
  }
  protected override void Render(System.Web.UI.HtmlTextWriter writer)
  {
   writer.Write("Hello " + PersonName);
  }
 }
}

代碼段6.在ViewState中保存數據

  Web.config和Machine.config文件

  這些文件中的數據對于某個應用程序的所有用戶來說都可以使用。Web.config文件中存儲的數據可用于應用程序的整個生命周期。這些數據一般很小,該對象一般用于保持文件位置和數據庫連接的字符串。大的數據片最好保存在其它位置。

  作為其它多樣集合對象的補充,ASP.NET引入了一組XML配置文件用于管理應用程序甚至于整個服務器的很多設置。每個ASP.NET應用程序使用Web.config文件來設置它的許多屬性,每個服務器在系統文件夾下有一個作為應用程序基礎的Machine.config文件。這些設置都作為默認值使用,除非重載。作為保存配置數據的補充,這些文件可以保存應用程序(或多個應用程序)需要的數據。

  無論什么時候應用程序啟動都會讀取配置信息,接著這些信息被緩沖。由于被緩沖了,應用程序可以快速讀取它們,因此不需要考慮應用程序的瓶頸,因為它經常執行某個文本文件的一些整型信息。此外,某個應用程序的Web.config的改變將導致應用程序重新啟動。這確保了對配置文件信息的修改立即反映到應用程序中。

  數據庫連接信息,默認圖像路徑和XML數據文件路徑是通常保存在Web.config文件中的數據片。在Web.config文件中保存數據的語法如下,在理想的情況下你也許希望使用集成的SQL身分驗證:


<configuration>
<!-應用程序特殊設置 -->
<appSettings>
<add key="connectionString" value="server=myDBServer;
uid=myUID;pwd=myPassword;database=myDB" />
</appSettings>
<system.web>
<!-所有的wsb設置 -->
</system.web>
</configuration> 

  為了訪問ASP.NET頁面中的值,可以使用ConfigurationSettings集合,它在System.Configuration名字空間中。下面的簡單例子演示了怎樣提取前面的連接字符串到一個本地變量中:

using System.Configuration;
ooo
String strConnString =
ConfigurationSettings.AppSettings["connectionString"];

  給System.Configuration名字空間添加一個引用減少了引用這些值的代碼數量。因為對Web.config或 Machine.config的修改將導致應用程序立即重新啟動,典型情況下這些值只由服務器系統管理員手動修改。因此你可以認為這些文件是保存只讀數據而不是應用程序中修改的數據的好位置。

  結論

  有效的狀態管理意味著識別的用戶經驗、數據錯誤與快速的頁面或事務處理之間的巨大差別。盡管狀態管理在ASP 3.0中不太適用,但是ASP.NET把它帶到了本文討論的狀態對象的控制之下。小心地使用它們將使你給用戶展示最佳的Web經驗。


 

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
欧美熟乱第一页| 亚洲国产成人高清精品| 日韩欧美不卡一区| 欧美裸体一区二区三区| 久久综合一区| 欧美伊人久久久久久久久影院| 美女尤物久久精品| 色一区在线观看| 欧美日韩激情一区| 欧美一区二区私人影院日本| 91精品国产麻豆| 精品少妇一区二区三区免费观看 | 成人免费看的视频| av在线不卡网| 欧美日产一区二区三区在线观看| 欧美日韩免费高清| 影音先锋国产精品| 欧美亚洲自偷自偷| 欧美视频一区在线| 欧美大胆人体bbbb| 中文字幕av不卡| 亚洲精品免费一二三区| 午夜精品福利在线| 国产麻豆视频一区| 91色综合久久久久婷婷| 亚洲视频久久| 久久婷婷国产综合尤物精品| 欧美日韩你懂得| 久久婷婷一区二区三区| 一区二区三区四区中文字幕| 日韩不卡免费视频| 成人永久aaa| 亚洲午夜精品久久久久久浪潮 | 欧美三级日韩在线| 久久精品人人做人人爽人人| 一区二区三区在线视频免费| 久久国产精品一区二区| 99久久精品情趣| 中文精品视频一区二区在线观看| 欧美日韩精品专区| 国产精品视频你懂的| 日日摸夜夜添夜夜添精品视频| 成人免费三级在线| 国产精品久久久久久久久久直播| 欧美日韩国产首页| 一区二区三区中文字幕电影 | 蜜臀av亚洲一区中文字幕| 国产精品资源在线看| 亚洲国产mv| 日韩一区二区三区免费看| 亚洲色图欧美在线| 国产成人综合亚洲网站| 亚洲毛片在线| 欧美精品一区男女天堂| 亚洲成人免费在线观看| 99精品国产视频| 久久先锋影音| 国产精品乱人伦中文| 国产精品18久久久久久久久久久久 | 成人午夜私人影院| 亚洲一区日本| 国产日产欧美精品一区二区三区| 美女精品自拍一二三四| 亚洲作爱视频| 久久久五月婷婷| 久久国产精品99久久人人澡| 亚洲国产精品一区二区第四页av| 日韩三级精品电影久久久| 视频一区在线播放| 亚洲高清二区| 国产欧美日韩亚州综合| 国产美女一区二区| 噜噜噜躁狠狠躁狠狠精品视频 | 国产精品看片你懂得| 国产成人在线观看免费网站| 久久久久久久久久久一区 | 欧美一区高清| 精品国产免费人成在线观看| 久久激情五月激情| 老司机精品福利视频| 亚洲男帅同性gay1069| 91亚洲国产成人精品一区二三 | 午夜激情久久久| 亚洲精品在线视频观看| 国产欧美一区二区精品性色超碰| 国产99一区视频免费 | 亚洲影院免费观看| 亚洲国产一区二区精品专区| 国产亚洲欧美色| 9i在线看片成人免费| 欧美一区二区三区性视频| 久久国产精品区| 欧美日韩国产首页在线观看| 蜜臀av性久久久久蜜臀av麻豆| 翔田千里一区二区| 亚洲一本大道在线| 久久久久网站| 丝袜亚洲另类欧美| 一本一道久久a久久精品综合蜜臀| 一级日本不卡的影视| 国产日产精品一区二区三区四区的观看方式 | 亚洲欧洲日本国产| 久久丁香综合五月国产三级网站 | 久久黄色小说| 亚洲成人www| 久久综合图片| 精品在线播放午夜| 欧美高清视频不卡网| 激情综合色播五月| 91精品国产一区二区人妖| 国产精品538一区二区在线| 宅男在线国产精品| 成人白浆超碰人人人人| 久久婷婷综合激情| 亚洲小说欧美另类社区| 亚洲精品乱码久久久久久久久 | 日本二三区不卡| 精东粉嫩av免费一区二区三区| 欧美喷潮久久久xxxxx| 成人美女在线视频| 国产精品女主播在线观看| 亚洲三级电影在线观看| 性感美女久久精品| 7777精品伊人久久久大香线蕉 | 亚洲在线播放电影| 麻豆精品久久久| 2024国产精品| 影音先锋一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩第一区日日骚| 99久久精品99国产精品| 亚洲色图欧美在线| 欧美午夜理伦三级在线观看| 成人美女在线视频| 亚洲欧美国产高清| 欧美日韩成人综合天天影院| 99国产精品国产精品毛片| 尤物av一区二区| 欧美日本视频在线| 亚洲午夜91| 韩国成人在线视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 色88888久久久久久影院野外| 成人性生交大片免费看中文 | av在线一区二区| 亚洲成a天堂v人片| 亚洲精品一区二区三区99| 亚洲一区二区三区高清不卡| 国产成人三级在线观看| 亚洲丝袜制服诱惑| 欧美一区二区三区人| 亚洲茄子视频| 国产成人精品免费| 亚洲在线观看免费| 精品久久久久久久一区二区蜜臀| 99热精品在线观看| 国产成人在线网站| 亚洲国产综合色| 久久久国产精品不卡| 91黄色免费版| 亚洲经典在线| 99re热视频这里只精品| 蜜臀国产一区二区三区在线播放| 中文字幕精品一区| 日韩免费电影网站| 久久亚洲色图| 亚洲一二三区精品| 成人午夜私人影院| 久久丁香综合五月国产三级网站 | 国产一区二区影院| 亚洲高清免费视频| 中文欧美字幕免费| 精品少妇一区二区三区| 欧美亚洲国产一区二区三区| 国产亚洲毛片在线| 91啪在线观看| 成人高清免费观看| 国产精品资源在线| 免费人成网站在线观看欧美高清| 亚洲美女屁股眼交| 国产精品免费久久| 久久精品人人做| 日韩欧美综合在线| 在线成人午夜影院| 欧洲一区二区三区在线| 蜜桃av综合| 99精品福利视频| 狠狠入ady亚洲精品经典电影| 不卡一区二区三区四区| 国产成人精品一区二区三区四区| 美女看a上一区| 另类小说视频一区二区| 午夜av电影一区| 亚洲123区在线观看| 亚洲.国产.中文慕字在线| 亚洲精品日韩综合观看成人91| 国产精品卡一卡二| 中文字幕一区二区三区在线观看| 久久久99精品久久| 久久色成人在线|