Como descobrir o tamanho de sessão no ASP.NET da aplicação web?
Pergunta
Como descobrir o tamanho de sessão no ASP.NET da aplicação web?
Solução
Se você está tentando obter o tamanho da sessão durante a execução em vez de rastreamento de depuração, você pode querer tentar algo como isto:
long totalSessionBytes = 0;
BinaryFormatter b = new BinaryFormatter();
MemoryStream m;
foreach(var obj in Session)
{
m = new MemoryStream();
b.Serialize(m, obj);
totalSessionBytes += m.Length;
}
(Inspirado por http://www.codeproject.com/KB/session/exploresessionandcache aspx )
Outras dicas
O código na resposta acima continuou me dando o mesmo número. Aqui está o código que finalmente funcionou para mim:
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));
}
Eu acho que você pode encontrar essa informação, adicionando Traço = "true" para a diretiva de página de uma página aspx. Então, quando a página é carregada você pode ver um grande número de detalhes sobre a solicitação da página, incluindo informações sobre a sessão que eu penso.
Você também pode ativar o rastreamento em toda a sua aplicação, adicionando uma linha ao seu arquivo web.config. Algo como:
<trace enabled="true" requestLimit="10" pageOutput="true" traceMode="SortByTime"
localOnly="true"/>