Является ли Caching in C # правильным подходом для меня? - PullRequest
6 голосов
/ 30 декабря 2011

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

  1. При использовании Sql Cache Dependency ... Я знаю, что вы можете указать, какие таблицы будут отслеживаться, но если изменение произойдет с любой из этих таблиц, сбрасывает ли он весь кэш?Я понимаю, что я не хочу кэшировать таблицы, в которых будут частые изменения, но мы могли бы получить хорошую кучу кэшированных таблиц, и даже если каждая таблица получает только несколько обновлений в день, это может превратиться в 50-ю перезагрузки кэша.ежедневно (8-часовое окно).

  2. Я буду создавать и поддерживать этот кэш с помощью библиотеки GAC DLL.Большое количество различных приложений будет обращаться к этому GAC в любое время.Поддерживает ли каждое приложение свою собственную копию кэша или оно просто хранится в одном глобальном местоположении (или, возможно, в пуле приложений)?

  3. Есть ли на сервере физическое местоположение, где я могупосмотреть, сколько места занимает кэш в данный момент?Это было бы крайне уместно, если бы каждое приложение поддерживало свой собственный кэш, так как это могло бы в конечном итоге занять большой объем дискового пространства.

  4. Существует ли какой-либо способ физически принудительно перестроить кэш?Я мог видеть, что мой босс предположил, что кеш был виноват в конкретной проблеме, и мне нужно было бы исключить это на самом верхнем уровне.Не «изменяя запись и говоря, что СЛЕДУЕТ перестраивать кеш», а скорее «делая [Действие X] и ЗНАЯ, что все, что было в кеше, теперь ушло»

Заранее спасибо за вашеответы и время.

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011
  1. SqlCacheDependency отслеживает только таблицы в старом стиле SQL 2000, который основан на триггерах и опросах.Метод SQL 2005+ отслеживает изменения на уровне строк и использует компонент Service Broker.На уровне объекта Cache изменения приведут к недействительности только записей Cache, связанных с данной SqlCacheDependency (а не всего кэша).

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

  3. Вы можете посмотреть на несколько счетчиков производительности, связанных с кэшем, но если вас беспокоит дисковое пространство, вам не о чем беспокоиться, поскольку кэш ASP.NET полностью хранится в оперативной памяти.Кроме того, если ОЗУ переполняется, одной из особенностей кэша является то, что он освобождает старые / редко используемые объекты, чтобы освободить место для новых объектов.

  4. Самый простой способ форсироватькеш, который нужно удалить, должен просто перезапустить ваше приложение или AppPool (что в любом случае происходит раз в день или около того по умолчанию).Если вы хотите что-то более целенаправленное, вам нужно написать некоторый код для принудительного удаления определенных элементов из кэша, либо используя Cache.Remove (), либо используя связанные зависимости.

1 голос
/ 30 декабря 2011

от макушки головы:

  1. Только содержимое этой таблицы будет признано недействительным.
  2. Каждое веб-приложение имеет собственный кеш.
  3. Кэш хранится в памяти. и посмотрите этот вопрос Как определить общий размер кэша ASP.Net? относительно размера кэша
  4. http://bit.ly/vsqNDl это может помочь
...