Рекомендации и шаблоны кэша сеансов приложений ASP.net - PullRequest
4 голосов
/ 13 августа 2010

В asp.net основными хранилищами данных являются приложение, сессия, и у нас также есть кеш объектов.Я использовал советы и подсказки, основанные на здравом смысле (например, никогда не помещал данные пользователей в приложение, никогда не помещал неуправляемые ресурсы в сеанс и т. Д. И т. Д.), Но, если честно, я никогда не сталкивался с рекомендациями и примерами того, когда использовать то, что в MSDN илиот выдающихся личностей, таких как Хаак и Гу, которые охватывают все три вместе (например, первое попадание Google в MSDN говорит об использовании приложения в качестве глобального кэша, если это так, для чего нужен объектный кэш?

Также кое-что, что янайти редко обсуждаемое сравнение в сценарии, например, я знаю, что легко или излишне загружать использование памяти при чрезмерном использовании сеанса, но что произойдет, если вы использовали кэш объектов в качестве альтернативы для хранения тех же данных?

Изменить: Это лучшая информация, которую я нашел до сих пор: http://msdn.microsoft.com/en-us/library/ff647787.aspx

Ответы [ 2 ]

2 голосов
/ 13 августа 2010

Используйте Session для хранения информации, специфичной для пользователя, поскольку платформа автоматически связывает каждое хранилище сеансов с конкретным пользователем.

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

Я не знаю, когда вы 'Мне когда-либо нужно было использовать объект Application.Если я не ошибаюсь, объект Application - это скорее реликвия из классического ASP, чем что-либо еще.

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

0 голосов
/ 13 августа 2010

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

Вы можете комбинировать это с шаблоном фасада - оболочка предоставит конкретные методы, которые вам нужны, вместо предоставления общего интерфейса. Например, сеанс принимает объекты и возвращает объекты, он не является строго типизированным. Оболочка может иметь строго типизированные методы add и get.

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