ASP.NET中Session的幾點認識和疑問

來源:互聯網
上載者:User
1)對於實值型別的變數,Session中儲存的是實值型別的拷貝Session["__test0"] = 1;
int i = (int)Session["__test0"]+1;
int j = (int)Session["__test0"];

結果i=2,j=1
2)對於引用類新的變數,Session中儲存的是引用CDACommon cda  = new CDACommon();
Session["__test"] = cda.GetDataSet("select top 1 * from tb_customer");
DataSet ds = (DataSet)Session["__test"];
DataSet ds2 = (DataSet)Session["__test"];
ds.Tables[0].Rows[0][0]="9999";    

結果ds.Tables[0].Rows[0][0]=="9999"      ds2.Tables[0].Rows[0][0]=="9999";    
3)新的瀏覽器視窗啟動後,開始一個新的Session,觸發Global的Session_Start的調用,從第一個瀏覽器視窗開啟的瀏覽器視窗不啟動新的Session。Session到期後,執行頁面的提交也會觸發Session_Start,等於是新的一個Session。
4)對於Web Service,每個方法的調用都會啟動一個Session,可以用下面的方法來使多個調用在同一個Session裡CWSSyscfg cwsCfg = new CWSSyscfg();
cwsCfg.CookieContainer = new System.Net.CookieContainer();

CWSSyscfg是一個Web Service類,Web Service的給代理類設定CookieContainer屬性,只要多個代理的CookieContainer屬性是相同的值,則對這些Web Service的調用在同一個Session。可以用單例模式來實現。
5)只要頁面有提交活動,則Session的所有項都會保持,頁面在20分鐘(預設配置)內沒有任何提交活動時Session會失效。Session記憶體儲的多個資料項目是整體失效的。
6)在session中如果儲存的是非序列化的類比如DataView,在用SQLServer儲存Session的模式下,無法使用。查看一個類是否是序列化的方法是,需看是否用[Serializable]來標記了該類。

7)關於Sesson的清除,沒有搞太清楚。如果我在Session中儲存一個比較大的DataSet,這樣aspnet_wp.exe佔有的記憶體會很大,假如我退出了使用這個DataSet的頁面,我想釋放該Session,我用Session.Clear() 或者DataSet.Clear()都 不能使記憶體的佔用降下來,即使Session過了期限,記憶體也沒有降下來,比較困惑,誰能給我詳細解釋一下。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.