Кэш объекта не возвращает результаты
-
10-12-2019 - |
Вопрос
У меня действительно странная проблема. Я использую кэш объекта для быстрой извлечения результатов при использовании Ssquery.
Мой код, чтобы получить элементы следующим образом:
PortalSiteMapProvider ps = PortalSiteMapProvider.CurrentNavSiteMapProviderNoEncode;
var items = ps.GetCachedListItemsByQuery(((PortalSiteMapNode)ps.CurrentNode).WebNode, "mylistname", myQuery, site.RootWeb);
.
Когда я запускаю этот код, я получаю все результаты, которые удовлетворяют условию в запросе (независимо от того, сколько раз я обновляю страницу). Однако, если я внесу в список (добавить или удалить элемент), кэш объекта возвращает измененный набор элементов только один раз. В следующий раз, когда я обновляю страницу, я получаю 0 результатов.
e.g. Если бы у меня было 5 предметов, а затем добавляю 1 новый элемент, я получаю 6 элементов, которые являются правильным результатом. Но когда я снова обновляю страницу, я получаю 0 результатов. Это состояние сохраняется до тех пор, пока я не перерабатываю пул приложений или кэш промывания объекта.
Мой кэш объекта устанавливается на 300 МБ, он проверяет изменения, когда запрос выполняется, и значение множителя установлено значение 3.
Любые идеи, что может быть источником моих проблем?
Любой совет приветствуется! Спасибо.
Редактировать:
Я посмотрел в ULS и нашел это записи, когда возвращаются 0 элементов:
Cache miss for query Web (nor all entries not found) "query .... "
Fetching 4294967295 items.
Fetching super user items.
Fetching SuperReader items.
Merging super user and super reader items.
Cache Hit for query Web "query ... "
Creating result set.
Adding super user IDs.
Adding Super Reader IDs.
Nothing from SuperReaders.
. Решение
"Кэш-мисс для веб-сайта" может быть ответом.Вы можете смотреть в журнал ULS для неправильной части.Я бы посмотрел на журнал ULS для первого успешного запуска и посмотреть, не пропускается, не пропускается в списке, что приводит к свалкам кэша для списка, который вы запрашиваете.
Возможно, вы сможете исправить, изменив запрос на стороне сервера на стороне клиента.Если я помню правильно правильно наборы клиента, как правило, вытащите весь список перед запуском запроса, поэтому, я думаю, вы можете получить кэш-хит каждый раз.
Другие советы
кэш в основном могут произойти из-за недостатка памяти, поскольку все они хранятся в оперативной памяти.Если нет, то в основном причина должна сделать с конфигурацией кеша.Я бы предложил попробовать различные настройки, указанные для кэша объекта, как изменение Maxsize непосредственно в Web.config и т. Д. В статье ниже,
http://technet.microsoft.com/en-us/library/cc770229 (v=Office.14).aspx
Также убедитесь, что учетные записи пользователей кэша объекта настроены правильно, как упоминаются в следующей статье,
http://technet.microsoft.com/en-us/library/ff758656(v=Office.14).aspx
Я думаю, и не уверен, что это вернутся в профиль кэша Изменить элемент сделать кэш грязным и вот почему ваш следующий запрос ничего не дает вам .. Потому что объект больше не действителен Взгляните и играйте с параметрами профиля кэша .. Есть пара для интрасети и экстранет или анонимной
Sunchero