Как узнать размер сеанса в ASP.NET из веб-приложения?
Как узнать размер сеанса в ASP.NET из веб-приложения?
Ответы
Ответ 1
Если вы пытаетесь получить размер сеанса во время выполнения, а не в трассировке отладки, вы можете попробовать что-то вроде этого:
long totalSessionBytes = 0;
BinaryFormatter b = new BinaryFormatter();
MemoryStream m;
foreach(var obj in Session)
{
m = new MemoryStream();
b.Serialize(m, obj);
totalSessionBytes += m.Length;
}
(Вдохновленный http://www.codeproject.com/KB/session/exploresessionandcache.aspx)
Ответ 2
Код в ответе выше оставил мне тот же номер. Вот код, который, наконец, работал у меня:
private void ShowSessionSize()
{
Page.Trace.Write("Session Trace Info");
long totalSessionBytes = 0;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter b =
new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream m;
foreach (string key in Session)
{
var obj = Session[key];
m = new System.IO.MemoryStream();
b.Serialize(m, obj);
totalSessionBytes += m.Length;
Page.Trace.Write(String.Format("{0}: {1:n} kb", key, m.Length / 1024));
}
Page.Trace.Write(String.Format("Total Size of Session Data: {0:n} kb",
totalSessionBytes / 1024));
}
Ответ 3
Я думаю, вы можете найти эту информацию, добавив Trace = "true" в директиву страницы на странице aspx. Затем, когда загружается страница, вы можете увидеть большое количество сведений о запросе страницы, включая информацию о сеансе, о которой я думаю.
Вы также можете включить трассировку во всем приложении, добавив строку в файл web.config. Что-то вроде:
<trace enabled="true" requestLimit="10" pageOutput="true" traceMode="SortByTime"
localOnly="true"/>