System.Web.Caching은 LRU 알고리즘을 활용합니까?
문제
저는 제가 얼마 전에 만든 오픈 소스 프로젝트에 대한 문서 작업을 하고 있었습니다. WebCacheHelper.이는 System.Web.Caching의 기존 캐시 기능 위에 추상화한 것입니다.
서버 메모리가 부족할 때 캐시를 제거하는 데 사용되는 알고리즘의 세부 정보를 찾는 데 문제가 있습니다.
이 텍스트를 찾았습니다. MSDN:
ASP.NET 애플리케이션을 호스팅하는 웹 서버가 메모리에서 낮게 실행되면 캐시 객체 항목을 선택적으로 제거하여 시스템 메모리를 확보합니다..캐시에 항목이 추가되면 캐시에 저장된 다른 항목에 비해 상대 우선 순위를 할당 할 수 있습니다.더 높은 우선 순위 값을 할당하는 항목은 서버가 많은 요청을 처리 할 때 캐시에서 삭제 될 가능성이 적지 만 더 낮은 우선 순위 값을 할당하는 항목은 삭제 될 가능성이 높습니다.
내 취향에는 아직 조금 모호하다.캐시된 개체를 제거할 시기를 결정하는 데 사용되는 다른 요소가 무엇인지 알고 싶습니다.마지막으로 접속한 시간과 우선순위의 조합인가요?
해결책
소스코드를 살펴보겠습니다.제거는 다음에서 시작됩니다. TrimIfNecessary()
방법 CacheSingle
수업.먼저 만료된 모든 항목을 제거하려고 시도합니다. FlushExpiredItems()
의 방법 CacheExpires
수업.충분하지 않으면 "버킷"을 통해 반복을 시작합니다. CacheUsage.FlushUnderUsedItems()
.캐시 사용 데이터/통계는 다음에 따라 "버킷"으로 구분됩니다. CacheItemPriority
각 버킷에서 별도로 처리되는 통계/LRU입니다.버킷을 통해 두 번의 반복이 있습니다.첫 번째 반복에서는 새로 추가된 항목만 제거합니다(마지막 10초 동안).두 번째는 다른 항목을 제거합니다.에서 항목을 제거하기 시작합니다. CacheItemPriority.Low
버킷과 해당 LRU 항목.충분히 제거되면 중지되고, 그렇지 않으면 다음 LRU 항목과 더 높은 우선순위 버킷으로 계속됩니다.닿지 않아요 CacheItemPriority.NotRemovable
항목은 사용량 버킷에 추가되지 않습니다.