2009年1月7日 星期三

ASP.NET 儲存及傳遞資料的網頁變數

在 ASP.NET 的網頁中,有幾個變數可以讓我們暫時儲存資訊及傳遞資訊給別的頁面
Application
Session
ViewState
Cache
Cookies
QueryString
Hidden Field
如能善用這些變數,在伺服器的效能或是頻寬的使用上,都能夠更有效益
因此對於這七個變數,以下僅就小弟所知道的列一張簡單的表,再加以簡單說明

ASP.NET 網頁用變數表
  存放位置 存活長度 存取範圍
Application Server Memory 開始:網頁應用程式開啟(Application_Start)
結束:網頁應用程式結束(Application_End)
全域(整個應用程式)
Session Server Memory 開始:Client 存取頁面
結束:Client 存取頁面後一段時間
單一個用戶
ViewState Client Page 與 Page 共存亡 單一個用戶
Cache Server Cache 可設定存活起訖 全域(整個應用程式)
Cookies Client Memory 可設定存活起訖 單一個用戶
QueryString 網址列 與網址共生死 單一個用戶
HiddenField Client Page 與 Page 共存亡 單一個用戶

 

ASP.NET 網頁變數使用方法及時機

1.Application

Application Variables 的使用方法:
Application.Lock(); // 鎖住 Application
Application["Count"] = (int)Application["Count"] + 1;
Application.UnLock(); // 解開 Application
要注意的是使用 Application Variable 的時候要先取得使用權, 避免同步寫入。
就像使用廁所的時候要敲門,進入廁所之後要鎖門,否則同時間有人要使用,就尷尬了。
還有另一點需要注意,Application 候寫入僅能在 Global.asax 內操作。

Application Variables 的使用時機:
因為 Application 這個變數是個全域變數,任何的使用者頁面都可以使用,因此在使用上需要事先規劃且注意,再者,Application 是佔用 Server 的記憶體,如果放太多的資訊在裡面,又不常用到,只是徒然浪費 Server 的記憶體空間。因此 Application 多被用來儲存需經常存取的網站資料,幾乎每個頁面都會存取的,像是造訪人數計數、最新訊息、目前線上人數……等等。

2.Session

Session Variables 的使用方法:
Session["Count"] = (int)Session["Count"] + 1;
Session Variables 的使用時機:
Session 這個變數的特性是跟隨 Client 的存取而存在,而又佔用到 Server 的記憶體,因此也不能夠大量的使用。每個 Client 端都有其唯一的 Session ID,利用這個 ID 即可以做出許多的變化(待日後再說明)。所以我們可以想到, Session Variables 大都被使用來存放專屬於 Client 經常存取的資訊。像是會員ID、名稱之類的訊息。

3.ViewState

ViewState Variables 的使用方法:
ViewState["Count"] = (int)ViewState["Count"] + 1; 如果頁面沒有需要使用 ViewState,可以透過 @Page 指示詞加上 EnableViewState = false 屬性,減少傳回的資料量,以減少頻寬使用量。或是針對不需要傳回訊息的元件,設定其 EnabledViewState = false(已是預設值)。

ViewState Variables 的使用時機:
尤於 ViewState 是跟隨每一個 Page 而存活,且不佔記憶體空間,因此非常適合拿來使用在頁面之間傳遞訊之用,但是如果資料量過大,會影響到頻寬的使用量。通常都被使用來給 Client 端使用者輸入資料使用。

4.Cache

Cache Variables 的使用方法:
<%@ OutputCache duration="100" varybyparam="none" %>
Cache.Insert("Count","0"); // 建立
Cache["Count"] = (int)Cache["Count"] + 1; // 存取

Cache Variables 的使用時機:
Cache 的資料存放在 Server 端的快取記憶體中,因此如大量使用會影響到 Server 的快取記憶體使用量。但如果 Cache 用的好,Server 的負擔可以減少很多。下面列一些文章,歡迎大家參考看看。

有關於 Cache 的使用介紹文章:
MSDN http://msdn.microsoft.com/zh-tw/library/h30h475z.aspx
MIS2000 Lab. http://www.dotblogs.com.tw/mis2000lab/archive/2008/09/12/5364.aspx
邦邦的部落格 http://blog.ben.idv.tw/2008/12/aspnet-cache.html

5.Cookies

Cookies Variables 的使用方法:
Cookies["Count"] = (int)Cookies["Count"] + 1;
Cookies Variables 的使用時機:
因為 Cookies 是放在 Client 端的檔案中,又可自行設定存活時間,因此經常被拿來使用存放一些較不敏感的資訊,以供使用者下次再登入時使用。像是使用者下次進入網站時是否自動登入、加密過的帳密、喜好的版面配置……等等。

6.QueryString

QueryString Variables 的使用方法:
Response.Redirect("http://Default.aspx?Count=0&ID=3");
QueryString Variables 的使用時機:
因 QueryString 的容量小(可存放255 字元)及不佔記憶體的特性,因此經常被用來當為查詢字串,比如查詢網站內的某一篇文章或是某個貨品的資訊。

7.HiddenField

HiddenField Variables 的使用方法:
HiddenField1.Value = (int)HiddenField1.Value + 1;
HiddenField Variables 的使用時機:
HiddenField 為 Page 裡的一個元件,只是不會被瀏覽器顯示,和 ViewState 性質很像。同樣也有使用量大時,佔用頻寬的缺點。