2015-05-05 3 views
2

Мне нужно очистить кэш, который используется для настраиваемого модуля в Sitecore, что лучше всего его очистить?Очистка кэша .NET для Sitecore

Мы в настоящее время добавления ключей в кэш с

System.Web.HttpContext.Current.Cache.Add(key, obj, dependencyKey, DatTime.MaxValue); 

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

Пробовал удаление ключей с:

System.Web.HttpContext.Current.Cache.Remove(key); 

Но это не сделать трюк

+0

Ваш вопрос о том, как запускать ваш код в конце публикации, или почему .Remove() не очищает кеш? – ddysart

+0

Вопрос в том, почему .Remove() не удаляет его на frontend – user1725266

+0

«На frontend» - вы добавили свой код для публикации: end или publish: end: удаленное событие? – jammykam

ответ

1

Там нет .Clear() метода.

Вы можете перебирать все записи и удалять их по их ключу (или ID) с использованием метода GetEnumerator класса Cache.

IDictionaryEnumerator enumerator = Cache.GetEnumerator(); 
while(enumerator.MoveNext()) 
{ 
    Cache.Remove(enumerator.Key); 
} 

Я бы запустил этот код в публикации: end: удаленное событие.

+0

Не приведет ли этот код к 'InvalidOperationException', потому что вы изменяете коллекцию при ее перечислении? Имея '.GetEnumerator', не лучше ли использовать' foreach' (и, следовательно, иметь возможность копировать данные через '.ToArray()')? – David

+0

Да где-то читал, что это (или может) вызвать массу проблем. Как насчет установки ускорения и добавления нового ключа в публикацию? Будет ли этот ясный кеш? – user1725266

+0

Это (в конечном счете) очистит кеш, но это, похоже, слишком усложняет ваш код большим количеством управления ключами. Что касается проблемы перечислителя: то, что предлагает Аравол, может случиться. Я не уверен. Перечислитель представляет собой объект, созданный отдельно, который создается до изменения объекта кэша. Поскольку мы постоянно перемещаемся по кешу, я думаю, что это безопасно. Если нет, то итерационный код можно сделать более надежным. Несмотря на это, я все равно очищаю кеш таким образом и делаю это при публикации: end: remote event. –