переменные сеанса вне процесса вызывают проблемы с памятью?

В моем текущем приложении asp.net я храню session variables в файле SQL server. Если указать InProc, то сессия хранится в памяти сервера, а для out of proc (в моем случае) сессия хранится в SQL сервере.

Это правда? Из того, что я прочитал, каждый запрос, требующий доступа к сеансу (в основном, каждый запрос страницы), будет десериализовать сеанс из базы данных и сохранять его после завершения запроса. Это означает, что значения будут храниться на веб-сервере после их получения. Чем это тогда отличается от InProc?

Для Out of Proc извлекает ли он только одну переменную сеанса, когда это запрошено? В противном случае мне кажется, что это то же самое, что и InProc. Что мне не хватает.


person Alex J    schedule 06.10.2011    source источник
comment
Обратите внимание, что если вам нужно управление сеансом вне процесса (из-за проблем с фермой/проблем с процессом/и т. д.), вы также можете подать в суд на режим StateServer (который хранится в памяти специальной службой, работающей где-то на сервере).   -  person dlev    schedule 07.10.2011
comment
да, но я в основном хотел сказать, что у сервера есть переменные сеанса в памяти для других режимов, хотя и только на время запроса.   -  person Alex J    schedule 07.10.2011
comment
Хорошо обязательно. Ваш код выполняется на узле сервера в рабочем процессе IIS. В какой-то момент этому процессу нужны данные в памяти. Как еще это могло работать?   -  person dlev    schedule 07.10.2011
comment
просто не был уверен, что все данные находятся в памяти одновременно или только запрошенные.   -  person Alex J    schedule 07.10.2011


Ответы (1)


Это правда?

Да, это правда.

Из того, что я прочитал, каждый запрос, требующий доступа к сеансу (в основном, каждый запрос страницы), будет десериализовать сеанс из базы данных и сохранять его после завершения запроса. Это означает, что значения будут храниться на веб-сервере после их получения. Чем это тогда отличается от InProc?

Значения хранятся в памяти только на время HTTP-запроса. В начале запроса они загружаются из SQL Server, а в конце запроса сохраняются в SQL Server. Это отличается от InProc, где значения сохраняются в памяти между запросами. А поскольку разные запросы (от одного и того же пользователя) могут обслуживаться разными узлами фермы серверов, использование SQL Server гарантирует, что все узлы фермы будут совместно использовать одни и те же значения сеанса.

person Darin Dimitrov    schedule 06.10.2011
comment
предполагая, что сервер получает много запросов в минуту, не приведет ли это к такому же эффекту. На время запроса память сервера будет содержать переменные сеанса. Я бы подумал, что в случае сайта со слишком большим трафиком внепроцессный процесс добавляет больше накладных расходов. Да, если у вас несколько узлов, у вас нет выбора. - person Alex J; 07.10.2011
comment
@AlexJ, значения загружаются за сеанс. Поэтому, если ваш сервер получает много трафика от разных пользователей, каждый запрос будет получать соответствующие значения сеанса из SQL Server. И, конечно же, SQLState добавляет накладные расходы по сравнению с InProc. Но это самое надежное решение для веб-ферм. Вы также можете использовать StateServer в веб-ферме, где сеанс хранится в памяти специального сервера и работает быстрее по сравнению с SQLState, но менее надежен и надежен. - person Darin Dimitrov; 07.10.2011