我想弄清楚特定會話狀態的大小。在我們的一個沉重頁面(表格中的大量數據)中,它逐漸變慢。該問題通過註銷系統來解決。配置文件內存使用會話狀態ASP.Net
我描述了尋找JavaScript內存泄漏的頁面,但是我沒有找到任何東西。我的下一個攻擊計劃是查看ViewState和Session State。 ViewState會很簡單,但Session State會帶來挑戰。
有誰知道有哪些技巧或工具可以幫助確定會話狀態的大小嗎?
編輯
會話狀態InProc方式。
我想弄清楚特定會話狀態的大小。在我們的一個沉重頁面(表格中的大量數據)中,它逐漸變慢。該問題通過註銷系統來解決。配置文件內存使用會話狀態ASP.Net
我描述了尋找JavaScript內存泄漏的頁面,但是我沒有找到任何東西。我的下一個攻擊計劃是查看ViewState和Session State。 ViewState會很簡單,但Session State會帶來挑戰。
有誰知道有哪些技巧或工具可以幫助確定會話狀態的大小嗎?
編輯
會話狀態InProc方式。
衡量:
int totalBytes;
var formatter = new BinaryFormatter();
for(int i = 0; i < Session.Count; i++)
{
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, Session[i]);
stream.Flush();
totalBytes += stream.Length;
}
}
而且我相信,如果你enable tracing它會告訴你關於會話的一些細節(不知道這一點,從來沒有嘗試過我自己)。
+1,因爲它看起來應該可以工作,但我一定會繼續尋找更好的方法...... – 2009-11-03 17:55:57
如果會話狀態中的所有內容都是可串行化的,那麼這將起作用。 – 2009-11-03 17:59:40
糟糕,我以爲你使用了proc會話。使用InProc時,如果對象不可序列化,它將不起作用。 – 2009-11-03 18:05:23
有些人提到ASP.NET跟蹤,但我自己並沒有太多運氣。我可以查看跟蹤信息,但會話部分從未填充過。
但是,這裏有一個有用的article from CodeProject,它使用http處理程序來查看當前會話(和緩存)。
有關於這個問題的兩個問題:
其會在會話狀態InProc方式
不存在存儲空間當會話狀態運行InProc方式 (正在處理) 構成內容的實際對象不會存儲在 集合中,只會參考 對象。在這些對象「in」會話 狀態中佔用的大小爲 的數字在這些 的情況下會引起誤解。
它使用BinaryFormatter
其「僅給出會話數據的大小的非常粗略的近似」。這只是一個近似值爲ASP.NET「使用經過優化的內部格式爲基本類型,如int,字符串,bool等,」
這就是說,我發現它有用,我認爲這是值得分享。可能需要將會話狀態推出處理以分析大小。
你到底有數嗎?它有多大? – UpTheCreek 2011-01-05 18:56:27