2011-10-28 11 views
8

Znalazłem się w CacheItem, który nie został poprawnie oczyszczony. Patrząc na MSDN i poprawić sobie w użyciu kalkulacji UTC oparciu znalazłem to mylące informacje:W jaki sposób buforowanie "Priorytet" i "AbsoluteExpiration" współdziałają ze sobą?

AbsolutExpiration służy do ustawiania jest "żywy keep-" danego CacheItem, Priority.NotRemovable służy do wymuszania na zawsze CacheItem. Brak powiadomienia o tym, która właściwość zastępuje drugą.

Poniższy kod wykonuje kompilację, a program SQL Profile również potwierdza, że ​​baza danych jest sprawdzana tylko raz, a każde inne żądanie pochodzi z pamięci podręcznej.

CacheItemPolicy _cachePolicy = new CacheItemPolicy() 
{ 
    AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddHours(6)), 
    Priority = CacheItemPriority.NotRemovable 
}; 

Przypuszczam, że ta siła kod elementy cache pozostać na zawsze, ale są kasowane po upływie 12 godzin od stworzenia, zgodnie z uwagą MSDN chodzi o ustawienia.

„implementacje Cache należy ustawić NotRemovable priorytet dla wpisu cache tylko wtedy, gdy realizacja cache zapewnia sposoby eksmitować wpisy z pamięci podręcznej oraz zarządzanie liczbę wpisów cache”

Wtedy z drugiej strony, dlaczego obie nieruchomości miałyby ze sobą współpracować? Czy implementacja przynosi pewnego rodzaju "więcej nieusuwalnego"?

+0

Sam się nad tym zastanawiałem dzięki niejasnej dokumentacji. W moim przypadku chciałbym, aby zapis w pamięci podręcznej nie był usuwany, chyba że wygasa, aby zapobiec czyszczeniu pamięci podręcznej pod dużym obciążeniem przed wygaśnięciem jej ważności. –

Odpowiedz

5

Tak więc zgodnie z"NotRemovable" uniemożliwia automatyczne usunięcie wpisu w pamięci podręcznej (np. Gdy pamięć podręczna kończy się w miejscu), ale zostanie usunięte po wygaśnięciu lub ręcznie wyniesie je z pamięci podręcznej.

NotRemovable Pozycje cache z tym priorytecie nie będą automatycznie usuwane z pamięci podręcznej jako serwer zwalnia pamięci systemowej. Jednak przedmioty z tym poziomem priorytetu są usuwane wraz z innymi przedmiotami zgodnie z bezwzględnym lub przesuwalnym czasem wygaśnięcia elementu.

+0

Twoja odpowiedź dotyczy 'System.Web.Caching.CacheItemPriority', a nie' System.Runtime.Caching.CacheItemPriority', która jest zadawana w pytaniu. Edytuj lub usuń odpowiedź - jest to bardzo mylące. (Patrzyłem na MSDN, kiedy znalazłem twoją odpowiedź, to jedyny powód, który zauważyłem). – xxbbcc

Powiązane problemy