Подтвердить что ты не робот

HttpRuntime.Cache [] vs Application []

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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