2015-04-13 12 views
0

Я изучаю управление государством в ASP.Net, используя сеансы. Я недавно использовал сервер сеанса ASP ASP для хранения данных сеанса моего приложения. Я хочу знать, что происходит с сеансом на сервере состояния сеанса asp.net, если он оставлен. Как память управляется на сервере состояния сеанса asp.net. Поведение, которое я наблюдал, следующее: Изначально перед созданием сеанса в моем приложении я проверил через диспетчер задач Windows память, потребляемую процессом состояния сеанса asp.net. Это было около 2300 КБ. Затем я создал сеанс в своем приложении, сериализовался и добавил в него много данных, после чего память процесса сеанса asp.net увеличилась примерно до 4700 КБ. Теперь я попытался удалить, очистить и отказаться от сеанса (Session.Abandon()), но память, потребляемая процессом состояния сеанса asp.net, не уменьшалась, она оставалась около 4300. Можете ли вы сказать мне, есть ли явное управление памятью шаги, которые необходимо соблюдать для сеансов proc, или я не вижу здесь каких-либо основных шагов. Как эта память обрабатывается процессом состояния сеанса asp.net? Если это не так, как я могу это сделать?Удаление/отказ от сервера состояния сеанса ASP.NET

+0

Метод 'Abandon' на самом деле дает указание государственному серверу опубликовать все ссылки на данные, однако процесс не обязан немедленно возвращать эту память обратно в ОС хоста. Конечно, более эффективно сохранять выделение памяти и повторно использовать ее в следующий раз, когда что-то хранится в состоянии сеанса. – Dai

+0

Я предлагаю вам посмотреть, что происходит с памятью состояния сеанса после сохранения того же графического объекта после его удаления. Мои деньги говорят, что использование памяти останется ниже 5 МБ. – Dai

+0

Тем не менее, состояние сеанса должно быть всего лишь * байтами * на пользователя, а не на мегабайтах. – Dai

ответ

0

Как только у вас больше нет ссылок (включая объект Session) на ваши данные, сборщик мусора очистит его.

Это не детерминированно, поэтому вы не знаете, когда это произойдет, но в конце концов.

Если этого не произойдет, то, вероятно, у вас есть другие ссылки на данные.

+0

Спасибо вам за быстрый ответ. Я предполагаю, что есть только одна ссылка на сеанс, который обрабатывается для каждого запроса на основе идентификатора сеанса, поэтому session.Abandon должен освободить сеанс. Я думаю, что Дай упоминал, что я объясняю, почему я столкнулся с этой проблемой. – Goldfish

+0

Да, Session.Abandon должен освобождать ссылки на объекты состояния сеанса, однако эти объекты могут ссылаться где-то в другом месте и, следовательно, никогда не будут собирать мусор. Это может быть или не быть так, я не знаю: GC - это тяжелое зверь, чтобы понять, и на самом деле может занять много времени, прежде чем он начнет и освободит память (возможно, даже не сделает этого, если только в системе недостаточно свободной памяти для других вещей, которые вы пытаетесь выделить). – Jcl

 Смежные вопросы

  • Нет связанных вопросов^_^