문제

저는 제가 얼마 전에 만든 오픈 소스 프로젝트에 대한 문서 작업을 하고 있었습니다. WebCacheHelper.이는 System.Web.Caching의 기존 캐시 기능 위에 추상화한 것입니다.

서버 메모리가 부족할 때 캐시를 제거하는 데 사용되는 알고리즘의 세부 정보를 찾는 데 문제가 있습니다.

이 텍스트를 찾았습니다. MSDN:

ASP.NET 애플리케이션을 호스팅하는 웹 서버가 메모리에서 낮게 실행되면 캐시 객체 항목을 선택적으로 제거하여 시스템 메모리를 확보합니다..캐시에 항목이 추가되면 캐시에 저장된 다른 항목에 비해 상대 우선 순위를 할당 할 수 있습니다.더 높은 우선 순위 값을 할당하는 항목은 서버가 많은 요청을 처리 할 때 캐시에서 삭제 될 가능성이 적지 만 더 낮은 우선 순위 값을 할당하는 항목은 삭제 될 가능성이 높습니다.

내 취향에는 아직 조금 모호하다.캐시된 개체를 제거할 시기를 결정하는 데 사용되는 다른 요소가 무엇인지 알고 싶습니다.마지막으로 접속한 시간과 우선순위의 조합인가요?

도움이 되었습니까?

해결책

소스코드를 살펴보겠습니다.제거는 다음에서 시작됩니다. TrimIfNecessary() 방법 CacheSingle 수업.먼저 만료된 모든 항목을 제거하려고 시도합니다. FlushExpiredItems() 의 방법 CacheExpires 수업.충분하지 않으면 "버킷"을 통해 반복을 시작합니다. CacheUsage.FlushUnderUsedItems().캐시 사용 데이터/통계는 다음에 따라 "버킷"으로 구분됩니다. CacheItemPriority 각 버킷에서 별도로 처리되는 통계/LRU입니다.버킷을 통해 두 번의 반복이 있습니다.첫 번째 반복에서는 새로 추가된 항목만 제거합니다(마지막 10초 동안).두 번째는 다른 항목을 제거합니다.에서 항목을 제거하기 시작합니다. CacheItemPriority.Low 버킷과 해당 LRU 항목.충분히 제거되면 중지되고, 그렇지 않으면 다음 LRU 항목과 더 높은 우선순위 버킷으로 계속됩니다.닿지 않아요 CacheItemPriority.NotRemovable 항목은 사용량 버킷에 추가되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top