2012-03-01 2 views
1

Я использую главную страницу, в которой меню генерируется динамически в соответствии с ролью пользователя в коде. Это же меню используется для всех приложений для конкретного пользователя до выхода из системы. Поэтому вместо того, чтобы воссоздать его, мне нужно одно и то же меню для всего приложения. Меню находится в StringBuilder, который имеет очень большой размер. Является ли сеанс или кеш данных лучше и меньше потребляет память в моей ситуации и почему. Пожалуйста, предложите?Что я могу использовать Session или Cache

Я хочу улучшить производительность главной страницы.

Благодаря

ответ

1

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

+0

supose у меня есть 4 роли. это означает, что только 4 меню кэшируется в памяти, и в соответствии с пользователем роли пользователь использовал это меню m i правильно? – Areeb

+0

да, или, может быть, вы можете просто поместить его в состояние приложения, которое звучит более разумно, так как вам не нужно их обновлять, кеш, предположительно, должен хранить данные, которые необходимо обновить, и ваш веб-сервер может отбросить объекты кеша при большой нагрузке, но приложение Состояние можно сохранить навсегда, проверьте это: http://msdn.microsoft.com/en-us/library/94xkskdf.aspx –

0

Если каждый пользователь получит такое же меню:

Вы должны рассмотреть вопрос о создании его в приложении «Cache» - Application [ «MyMenu»] или статическое поле на одну ваших объектов ,

Основная причина этого - срок службы. Если вы поместите его в объект уровня приложения, он будет длиться всю жизнь приложения. Помещая его на объект уровня сеанса, он будет потерян, когда этот сеанс закончится - при запуске сеанса для каждого пользователя, вы скоро обнаружите, что перехватываете данные.

С другой стороны ... если оно уникально для каждого пользователя:

Сеанс обеспечивает удобное место, чтобы положить эти данные, так как он является уникальным для этого пользователя, и не будет долго жить дальше этот пользователь покидает сайт.

Также подумайте о:

Если вы действительно думаете, память будет проблемой, или вы хотите, чтобы точно определить, как долго вы держите его за

Положите его в кэш. Вы можете определить количество времени, в котором он живет в кеше, и, кроме того, кеш начнет сбрасывать объекты, когда он становится коротким в памяти, поэтому он более чувствителен к нагрузке, чем другие параметры.

Существует хорошее обсуждение Session vs Cache on SO already

Дополнительно

Вы уверены, что ваше меню является то, что большой? Если это так, вы можете рассмотреть альтернативы - насколько велики вы говорите?

+0

Да память - проблема, а строка - около 113 строк, и для каждого пользовательского меню другое – Areeb

+0

Затем оно принадлежит кешу, и ваш код будет 1) Build Menu, 2) Поместите его в кеш с ключом для этого пользователя и 3) верните меню. Код поиска: 1) Проверьте, находится ли меню в кеше. 2) Если это так, верните это или 3) Build Menu и верните его обратно в кеш, прежде чем возвращать его. Вам необходимо сбалансировать стоимость извлечения с памятью, используемой для кеширования. – dash

+0

Спасибо за помощь. – Areeb

Смежные вопросы