Как кэшировать возвращаемое значение метода в C # MVC - PullRequest
0 голосов
/ 20 марта 2019

Я создаю веб-приложение, которое отбирает много информации из базы данных и возвращает ее.Я хотел бы сохранить возвращенное значение из метода, который возвращает таблицы из базы данных в течение 15 минут, но он не работает с использованием OutputCache Filter:

[OutputCache(duration=900)]
private DataTable[] GetInfoTables() {...}

, метод работает,просто найти, но когда я добавляю что-либо в одну из таблиц (после первого входа на сайт и просмотра их), она обновляется немедленно, и я хочу, чтобы она кешировалась в течение 15 минут.Я не могу кэшировать public ActionResult Index(), потому что он проверяет значение Session s.Спасибо

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Выходной кэш хранит визуализированный вывод HTMLПоэтому вы не можете использовать его для функций, методов и т. Д.

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

Другие прямые варианты обсуждаются в этом вопросе

0 голосов
/ 21 марта 2019

Резюме:

  • Я не знаю, как:

  • make OutputCache работа с обычным методом C #

  • но вы можете взломать его:

  • вы можете использовать MemoryCache для обычного метода C #

Решение

  • Импорт System.Runtime.Caching (или использовать VS Intense)

  • Тогда:

     private DataTable[] GetInfoTables()
        {

            ObjectCache cache = MemoryCache.Default;
            var dataTable = cache["DataTable"] as DataTable[];
            if (dataTable == null)
            {
                CacheItemPolicy policy = new CacheItemPolicy();
                policy.AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(5);
                dataTable =  getDataTable() ;
                cache.Set("DataTable", dataTable , policy);
            }

            return dataTable ;
        }

Скриншот

Я тестирую решение, используя EF и sql server

enter image description here

enter image description here

Ссылки

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