Кэширование объектов ASP.NET - сколько это слишком много? - PullRequest
2 голосов
/ 07 августа 2009

Я впервые начал изучать кеширование с помощью .NET, поэтому захотел запустить несколько сценариев.

Вопрос 1: Многие дорогие объекты У меня есть несколько небольших объектов (простые свойства int / string), создание которых довольно дорого. Это объекты статистики пользователя, каждый из которых может иметь от 1 до 10. Это хорошая или плохая практика - заполнять кеш этими ребятами?

Вопрос 2: Несколько дешевых регулярно используемых предметов Также есть несколько объектов (опять же маленьких), которые используются многократно при каждой загрузке страницы. Кэш предназначен для регулярного доступа?

Fanks!

stackoverflow: между прочим, инструмент подсказки вопросов для взлома.

Ответы [ 4 ]

1 голос
/ 07 августа 2009

Давайте ответим на вопрос в вашем заголовке - когда кэширование слишком много.

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

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

Итак, обычно вы можете много кешировать, прежде чем достигнете предела, когда нет смысла помещать что-либо еще в кеш.

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

1 голос
/ 07 августа 2009

Ответ на оба ваших вопроса - агрессивно их кэшировать, если вы можете.

Объекты, создание которых является дорогостоящим, но в то же время относительно статичными (то есть неизменными) в течение всей жизни приложения, должны быть кэшированы. Даже относительно недорогие объекты следует кэшировать, если вы можете повысить производительность, делая это.

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

1 голос
/ 07 августа 2009

Не думаю, что есть проблема с частым попаданием в кеш ...

В целом, asp.net Кэширование - это достаточно умный способ определения того, что сохранить, и вообще управление пространством. Как правило, хотя я не буду зависеть от кеша для хранения информации, я использую его только в качестве альтернативы удару диска или БД. Пользовательские объекты могут лучше обслуживаться состоянием сеанса.

http://aspnet.4guysfromrolla.com/articles/100902-1.aspx отличная статья, объясняющая встроенные возможности кэширования .net

1 голос
/ 07 августа 2009

1) Я бы их кешировал. Вы всегда можете установить CacheItemPriority.Low, если беспокоитесь о заполнении кэша

2) Да, кэш предназначен для регулярного доступа. Это может привести к значительному улучшению производительности.

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