Хранение данных в сессии не очень хорошая идея, потому что:
- Каждый пользователь получает отдельную копию одних и тех же данных - огромная трата памяти сервера.
- IIS перезапустит сеанс, если вы заполните его слишком большим количеством данных.
Я рекомендую хранить таблицы данных в Cache , а также заполнять каждую таблицу только при первом запросе, а не все сразу. Таким образом, если IIS начнет освобождать пространство в кэше, ваш код не будет затронут.
Очень простой пример выборки по требованию:
T GetCached<T>(string cacheKey, Func<T> getDirect) {
object value = HttpContext.Current.Cache.Item(cacheKey);
if(value == null) {
value = getDirect();
HttpContext.Current.Cache.Insert(cacheKey, value);
}
return (T) value;
}
РЕДАКТИРОВАТЬ: - Обновление вопроса
Кэш против локального сеанса. Состояние локального сеанса "все или ничего". Если он будет слишком полным, IIS будет перерабатывать все в нем. Напротив, элементы кэша удаляются по отдельности, когда памяти становится слишком мало, так что это гораздо меньше проблем.
Кэширование против сервера состояний сеанса - у меня нет данных для резервного копирования, поэтому, если я ошибаюсь, скажите, пожалуйста, так, но я бы подумал, что кэширование данных независимо в памяти на каждом физическом сервере AppDomain будет лучше масштабироваться, чем храниться в общей службе состояний сеанса.