ASP.NET и переменные сессии: мне нужны реальные мнения, пожалуйста - PullRequest
2 голосов
/ 21 июня 2011

Я занимаюсь разработкой легкого интернет-магазина. Этот магазин интегрируется с различными источниками. Абсолютно служит «плагином» для разных сценариев. То есть Плагин для бухгалтерского пакета для продажи локальных акций в Интернете и отражения продаж и т. Д.

Моя дилемма заключается в следующем: я борюсь за принятие определенного решения о том, как наилучшим образом реализовать информацию о состоянии. Этот магазин основан на шаблонах, поэтому я загружаю все детали шаблона из БД при первоначальной посадке. Затем я сохраняю эти детали в переменной сеанса и использую их для установки стилей элементов по мере необходимости, когда магазин делает свое дело.

Я беспокоюсь о нагрузке ... Я легко достигаю 100 МБ в рабочем процессе. Кажется, он колеблется под 100 МБ. Но я беспокоюсь о масштабируемости. Мне понадобится этот магазин для обслуживания сотен одновременно работающих пользователей.

Сам магазин не выполняет никаких запросов к базе данных. Все происходит из веб-службы / службы (WCF) и помещается в переменные сеанса. И переменные сеанса загружаются / перезагружаются только из веб-ссылки, если они пусты.

Мой текущий хост ограничен 100 МБ. Что заставляет мой рабочий процесс быть перезапущенным, вызывая ошибку представления macstate и сбрасывая мой сеанс. Я использовал свой локальный IIS и не могу заставить его реально расти больше, чем 100 МБ, независимо от того, что я делаю. Кажется, что он скачет до 80 МБ, а затем установится там, когда память будет переработана и т. Д.

Я определенно вручную перерабатываю все свои соединения WCF и переменные, поскольку они выполняются с целью их назначения. ТАК никаких утечек памяти, которые я могу найти. Как я уже сказал, он на самом деле не растет, использует только x объем памяти, а затем действительно зависает там ... немного вверх или вниз ...

Должен ли я считать, что мой сеанс хранится в БД, а не в памяти?

Или я должен полностью изменить свой подход? Что бы вы поделились своими мыслями?

Ответы [ 3 ]

1 голос
/ 21 июня 2011

Загружается ли шаблон на уровне пользователя?Если нет, то Application State кажется более подходящим для этого.Если это так, то да, Session State - это, вероятно, путь.

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

0 голосов
/ 21 июня 2011

Если шаблоны одинаковы для каждого пользователя, вы также можете сохранить их в Application переменных (то же самое, что и сеанс, за исключением одной переменной для всех пользователей).

Есливы подозреваете, что некоторые переменные занимают много памяти, но редко используются, вы также можете подумать о Cache.Система удалит объекты, которые не используются автоматически, но вам нужно реализовать некоторый код для «умной» загрузки из базы данных.

0 голосов
/ 21 июня 2011

Если вам нужно хранить это в состоянии сеанса, и вы ограничены в памяти процесса, то похоже, что база данных - это путь. Просто убедитесь, что все, что вы вводите в Session, является сериализуемым, так как это потребуется. Более подробная информация о MSDN . Опция базы данных, конечно, SessionStateMode.SQLServer.

...