Все это варианты, и у всех есть за и против:
База данных:
Хранение элементов в базе данных является довольно простым и последовательным вариантом. Вам действительно нужно беспокоиться о звонке в базу данных в оба конца, но, по крайней мере, у вас есть централизованное расположение для хранения данных, которые легко масштабируются в зависимости от нагрузки на Интернет. Однако, если это недолговечные данные, вам придется беспокоиться об очистке базы данных, поскольку она может стать громоздкой.
Session / Cache:
Сеанс обеспечивает быстрое решение для хранения в памяти, но масштабирование может стать проблематичным, если объем данных очень велик. Чем больше информации вы храните в памяти, тем меньше у вас возможностей для одновременных пользователей. Кроме того, если вы начнете добавлять несколько веб-серверов, вам придется изучить какой-либо сервер состояний сеанса, чтобы пользователи не могли спонтанно потерять свой сеанс.
Кэш имеет в основном все те же плюсы и минусы, за исключением того, что существует дополнительная сложность, связанная с необходимостью следить за тем, чтобы истек срок действия элементов кэша, и управлять проблемами параллелизма.
Опять же, оба эти решения легко внедрить, но они плохо масштабируются при большой нагрузке или больших объемах данных.
ViewState:
Viewstate - это также простое в реализации решение, обеспечивающее загрузку сервера и клиента, но может привести к увеличению времени загрузки для конечного пользователя. Также важно помнить, что ViewState может быть взломан, поэтому, если безопасность является проблемой, вы должны принять дополнительные меры предосторожности для обеспечения целостности данных.
Вывод:
В общем, выясните, чего вы хотите достичь, и выберите решение, которое наилучшим образом соответствует вашим потребностям. Поместите его за какой-нибудь уровень абстракции, например, интерфейс, чтобы потом можно было легко изменить детали, и тогда вам не придется сильно волноваться. Все дело в знании того, что будет работать лучше всего в вашем конкретном сценарии.