Похоже, что кросс-лист SharePoint не использует кеш

1

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

Мы стремимся улучшить производительность сайта SharePoint, который имеет собственный код, который использует списки SharePoint во многих местах. Я хотел бы кэшировать запросы, которые я делаю в этих списках, учитывая, что базовые данные довольно статичны.

Мы исследовали различные способы запроса списка SharePoint, с этой ссылкой, предполагающей, что CrossListQueryCache - это способ использовать кэширование SharePoint, заботясь о том, чтобы использовать конструктор, который принимает объект SPSite, а не SPWeb (поскольку использование позже, по-видимому, никогда не будет используйте кеш).

Основная структура кода, которую я использую в нашем приложении, такова:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite site = new SPSite(siteBaseUrl, token))
    {
        using (SPWeb web = site.OpenWeb())
        {
            SPList list = web.Lists["NameOfAList"];

            var crossListQuery = new CrossListQueryInfo
            {
                Lists = string.Format("<Lists><List ID='{0}' /></Lists>", list.ID.ToString("D")),
                ViewFields = "<FieldRef Name='NameOfAField' />",
                UseCache = true,
                Query = string.Empty,
                Webs = @"<Webs Scope=""Recursive"" />"
            };

            var cache = new CrossListQueryCache(crossListQuery);
            var results = cache.GetSiteData(site, siteBaseUrl);

            foreach (DataRow item in results.Rows)
            {
                // use the results
            }
        }
    }
});

То, что я нашел, со следом в базе данных, заключается в том, что cache.GetSiteData(site, siteBaseUrl) будет захватывать элементы списка из базы данных, хотя я выполнял тот же запрос много раз в прошлом и в моем сознании этот запрос должен быть кэширован.

Я создал учетные записи "супер пользователя" и "супер читателя", которые были предложены как проблема, которая может вызвать проблемы с кэшированием объектов на разных форумах, но это совсем не помогло.

Есть что-то, что мне не хватает?

Теги:
caching
sharepoint
sharepoint-2010

1 ответ

0
Лучший ответ

В итоге я нашел ответ - проблема была в переменной siteBaseUrl которую я использовал в методе GetSiteData - это был абсолютный URL-адрес, когда он должен быть относительным, хотя я не нашел никакой документации, которая подсказывает это!

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню