2008-11-28 3 views
29

Я знаю, что большинство людей рекомендуют использовать HttpRuntime.Cache, потому что у него больше гибкости ... и т. Д. Но что, если вы хотите, чтобы объект сохранялся в кеше в течение всего срока действия приложения ? Есть ли большой недостаток в использовании объекта Application [] для кэширования?HttpRuntime.Cache [] vs Application []

ответ

19

Пока вы не злоупотребляете статусом приложения, я не вижу проблемы с его использованием для предметов, которые вы не хотите истекать. Альтернативно, я бы, вероятно, использовал статическую переменную рядом с кодом, который ее использует. Таким образом, вы избегаете проходить через HttpApplicationState, а затем вынуждены иметь ссылку на System.Web, если я хочу получить доступ к моим данным.

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

Это, вероятно, преимущество использования кеша в вашей ситуации. Потребление памяти большего объема не так росло, потому что вы позволяете ASP.NET выпускать элементы в кеше, когда память становится недостаточной.

7

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

18

Приложение устарело кэш. Если вам нужно что-то с областью приложения, то вы должны либо создать его как статический член класса, либо использовать Cache. Если вы хотите перейти по пути кэш-памяти, но не хотите, чтобы он истекал, вам следует использовать параметр CacheItemPriority.NotRemovable, когда вы вставляете значение в кеш. Обратите внимание, что этот приоритет можно использовать и использовать зависимости кэша, например, если ваши данные зависели от чего-то в файловой системе. Все действия CacheItemPriority не позволяют HttpRuntime.Cache разумно очищать элемент, когда он чувствует давление в памяти, и использует свой алгоритм с наименьшим временем использования, чтобы очистить элементы, которые не видят большого использования.

+3

Почему вы говорите, что приложение устарело? Я никогда не видел этого нигде, и его не указано в документации. – 2009-07-13 20:31:35

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