Как кешировать список объектов в ASP.NET - PullRequest
2 голосов
/ 23 января 2010

У меня есть список объектов на странице asp.net. Когда страница загружается в браузере в первый раз, я выбираю данные из базы данных, создаю объекты с этими данными и заполняю список. Все это делается внутри обработчика событий загрузки страницы. Теперь, когда страница отправляется обратно на страницу, предыдущий список исчезает, поскольку все переменные были освобождены.

Как я могу кэшировать этот Список, чтобы при публикации этой страницы все мои объекты были доступны?

Ответы [ 5 ]

4 голосов
/ 23 января 2010

Как спросил @Eilon, это данные для конкретного пользователя или для сайта?

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

Если данные относятся к приложениям, вы также можете использовать Application Cache . Он распространяется на весь сайт, находится в домене процесса и поэтому доступен всем, у кого есть сеансы на этом сервере. При использовании в многосерверном сценарии необходимо соблюдать особую осторожность, но это легко выполнимо.

Следует отметить, что кэш приложений (и любые другие глобальные настройки) может замедлить загрузку приложения для первого пользователя, который заходит на сайт, если установка требует времени. IIS7 и ASP.NET пытались решить эту проблему с помощью недавно выпущенного модуля, который периодически будит ваше приложение, чтобы гарантировать, что глобальный кэш либо предварительно заполнен, либо остается живым.

3 голосов
/ 24 января 2010

, если это актуально только для этой страницы, я бы использовал ViewState. Синтаксис знаком, если вы использовали сессионное состояние раньше: установить:

ViewState["Persons"] = new List<Person>();

читать

List<Person> persons = ViewState["Persons"] as List<Person>;

Данные состояния просмотра сохраняются только для этой страницы, но отправляются в виде (сериализованного) текста вместе с вашей страницей, поэтому не используйте их для 1000 человек, поскольку ваша страница будет загружаться очень часто. Если у вас много данных, вам лучше использовать объект Cache, но только если вы не в веб-ферме и не забываете время от времени очищать данные, когда вам больше не нужны данные и использовать ключ кэша на пользователя, если это на данные пользователя. Наконец, вы можете использовать состояние сеанса, это хранилище для каждого пользователя, но не забывайте очищать данные время от времени, когда они вам больше не нужны.

Итак, из множества вариантов на выбор.

Michel

3 голосов
/ 23 января 2010

Используйте Cache.Add(key_name, list_object, ...), чтобы сохранить список, а затем Cache[key_name], чтобы получить его (вам нужно будет привести полученный объект к соответствующему типу).У метода Add есть еще несколько параметров, позволяющих указать, когда и когда срок действия кэшированного объекта истекает.

Объект Cache на самом деле System.Web.Caching.Cache и доступен со страницы aspx или как HttpContext.Current.Cache.

1 голос
/ 24 января 2010

Чтобы добавить ответ GrayWizard, вы также можете использовать viewstate, но, поскольку он включен в обратную передачу, убедитесь, что вы не сохраняете что-то, занимающее много места или нуждающееся в безопасности, поскольку по умолчанию оно не шифруется.

Вот краткий обзор - он устарел, но все еще актуален.

http://msdn.microsoft.com/en-us/magazine/cc300437.aspx

1 голос
/ 23 января 2010

использовать HttpContext.Current.Session.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...