Buforowanie w asp. net-mvc

Chciałbym buforować moje najbardziej ciężkie akcje bazy danych w mojej witrynie asp. net-mvc. W moich badaniach znalazłem

Ale chyba jeszcze tego nie rozumiem.
Chcę być w stanie buforować moje żądanie POST w zależności od kilku pars. Te pars są w obiekcie. Więc chciałbym buforować wynik
public ActionResult AdvancedSearch(SearchBag searchBag)

Gdzie searchBag jest obiektem, który przechowuje (kilka) opcjonalnych parametrów wyszukiwania. Moje poglądy są lekkie (jak powinny być), ale dostęp do danych może być dość czasochłonny, w zależności od tego, jakie pola są wypełnione w worku wyszukiwania.

Mam wrażenie, że powinienem buforować mój datalayer, a nie moje działania.
Jak mam użyć VaryByParam w atrybucie OutputCache?
Author: Boris Callens, 2008-12-22

4 answers

Lubię buforować również w warstwie modelu lub danych. To izoluje wszystko, co ma związek z pobieraniem danych z kontrolera / prezentacji. Możesz uzyskać dostęp do ASP.NET pamięć podręczna z System.Web.HttpContext.Current.Cache lub użyj bloku aplikacji Buforującej z biblioteki Enterprise. Utwórz klucz dla danych buforowanych z parametrów dla zapytania. Pamiętaj, aby unieważnić pamięć podręczną podczas aktualizacji danych.

 73
Author: Matthew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-23 04:25:40

LUB możesz być niezależny od HttpContext.Bieżąca i dostęp do pamięci podręcznej z HttpRuntime.Cache:)

 65
Author: Andrei Rînea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-23 16:06:50

Często OutputCaching może być najszybszy i najbardziej wydajny, ale tylko wtedy, gdy spełnia Twoje wymagania. Nie ma sensu mieć szybko skuteczne, jeśli to jest złe! ;)

W tym przypadku wygląda na to, że buforowanie na warstwie danych jest poprawne, ponieważ masz złożone potrzeby buforowania. Czasami można je połączyć, jeśli zestaw parametrów, które kontrolują, jakie wyjście jest buforowane, jest prosty.

 11
Author: Haacked,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 05:51:03

Możesz użyć buforowania wyjściowego coś takiego

[OutputCache(Duration = 10, VaryByParam = "empID")]
      public ActionResult GetEmployeeDetail(int empID)
      {
          Employee e = new Employee();
          return Content(e.getEmployeeDetails(empID));
      }

Lub możesz użyć profili pamięci podręcznej ustawić go w web config

<caching>
<outputCacheSettings>
    <outputCacheProfiles>
        <add name="Admin" 

        duration="86420" varyByParam="none"/>
    </outputCacheProfiles>
</outputCacheSettings>
</caching>

and use this tag
[OutputCache(CacheProfile="Admin")]
 0
Author: Nikki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-21 10:11:13