Как узнать размер сессии в ASP.NET из веб-приложения? - PullRequest
14 голосов
/ 13 октября 2008

Как узнать размер сеанса в ASP.NET из веб-приложения?

Ответы [ 3 ]

29 голосов
/ 13 октября 2008

Если вы пытаетесь получить размер сеанса во время выполнения, а не при трассировке отладки, вы можете попробовать что-то вроде этого:

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)

18 голосов
/ 16 марта 2011

Код в ответе выше давал мне тот же номер. Вот код, который наконец-то сработал для меня:

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));
}
0 голосов
/ 13 октября 2008

Я думаю, что вы можете найти эту информацию, добавив Trace = "true" к директиве страницы aspx. Затем, когда страница загружается, вы можете увидеть большое количество деталей относительно запроса страницы, включая информацию о сеансе, я думаю.

Вы также можете включить трассировку во всем приложении, добавив строку в файл web.config. Что-то вроде:

<trace enabled="true" requestLimit="10" pageOutput="true" traceMode="SortByTime" 
 localOnly="true"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...