Мне нужно создать синглтон, который будет содержать много данных для конкретного пользователя. Однако мне неясно, каково поведение этого синглтона в отношении запросов многопользовательских приложений.
Вот сценарий:
В событии AppStart я хочу загрузить общие данные для всех пользователей (из SQL) и сохранить их как коллекцию где-нибудь в механизмах хранения ASP.NET. (Любые указатели относительно того, куда это должно пойти, были бы очень благодарны! Я думаю, кэш.)
Если я сохраню эти данные в кеше, мне также потребуется создать статическое свойство в Global.asax, которое обеспечит доступ к этим данным из кеша.
Это не идеально, потому что всякий раз, когда экземпляр какой-либо конкретной страницы, или общий обработчик, или что вы пытаетесь запросить эти данные с помощью Linq, свойство должно загружать данные из кэша ... вводя задержку. Мне нужно, чтобы эти данные были немедленно доступны. (представьте себе, что около 5 тысяч строк данных хранятся в коллекции объектов ...)
Я думал о том, чтобы использовать одноэлементные данные для получения и хранения этих данных, но я не знаю, как они будут вести себя между запросами (и обратными передачами), а также экземплярами приложений, с точки зрения их сохранности.
В событии PostAuthenticate я хочу получить пользовательские данные из SQL в виде коллекции. Если я храню его как единое целое (аналогично обычным данным), мне не ясно, как:
- Как сохраняются данные?
- Какова область действия этого синглтона (оно должно быть на протяжении сеанса пользователя).
- Как я могу обеспечить немедленную доступность данных для любых нужд, которые их потребляют?
- Что происходит между постбеками этого синглтона?
- Если другой пользователь войдет в систему, будет ли создан другой экземпляр этого синглтона для этого конкретного экземпляра приложения?