Требуется информация о переменных сеанса ASP.net - PullRequest
0 голосов
/ 21 мая 2018

У меня есть приложение ASP.net WebForms.Я использовал переменные сеанса в моем приложении.У меня есть требование получения памяти, используемой переменными сеанса на страницах aspx.cs.Как я могу это сделать.Для начала я знаю, что могу сделать это следующим образом.

int totalSessionBytes;
BinaryFormatter b = new BinaryFormatter();
MemoryStream m;
b.Serialize(m, Session["table1"]);
totalSessionBytes = m.Length;

Любой другой подходящий способ, кроме этого?Некоторые из моих переменных сеанса также сохраняют DataTables.Смогу ли я записать в память такие переменные сеанса?

1 Ответ

0 голосов
/ 21 мая 2018

Получение общей памяти, используемой хранилищем сеансов, работает только в том случае, если вы используете хранилище InProc - если вы используете внешнее хранилище для состояния сеанса, такого как Redis или SQL-Server, тогда ответ равен нулю.

Ваш предложенный подход по крайней мере удвоит очевидное использование памяти в состоянии сеанса, потому что вы выполняете копию (сериализованных данных!) В MemoryStream, который является родителем Byte[] и тогда вы никогда не Dispose это, оставляя боги GC решать, когда снизить нагрузку на память.Ваш подход также возвращает данные только для состояния сеанса текущего пользователя, а не для всех пользователей.

Проблема также усложняется, если учитывать такие вещи, как String Interning (где идентичные строковые значения во время выполнения .NET являются общиминесколькими строковыми ссылками) - поскольку эти строковые значения могут совместно использоваться различными состояниями сеанса разных пользователей.

Единственный способ точно определить, сколько используемой памяти используется, - использовать инструмент профилирования памяти, такой как JetBrains dotMemory или MemProfiler или инструменты анализа CLR / GC в WinDBG и в окне инструментов диагностики Visual Studio.

...