내 응용 프로그램에서 MemoryCache를 사용하지만 항목이 만료 될 것으로 예상하지 않습니다. 따라서 항목은 AbsoulteExpiration
또는 SlidingExpiration
이 설정되지 않은 상태에서 기본 정책으로 캐시에 삽입됩니다.MemoryCache - 항목 만료 방지
최근에 높은 서버에서 마지막으로 캐시에 문제가 발생했습니다. 이전에 캐시에 삽입 된 원하는 값 대신 null 값을 반환했기 때문입니다. 만료 날짜가 명시 적으로 설정된 항목 만 캐시에서 제거된다는 사실이 밝혀졌습니다. CacheMemoryLimit
및/또는 PhysicalMemoryLimit
값을 초과하는 메모리 압력에서 MemoryCache는 다른 요소도 제거합니다.
이 문제를 방지하려면 어떻게해야합니까? 요소가 캐시에 한번 설정되면 안전하게 다시 요소에서 가져올 수 있습니다.
PollingInterval
을 몇 가지 큰 값으로 설정하는 것이 고려되었지만 잠재적 인 문제 만 지연됩니다 (폴링 간격은 문서에서 정확한 시간 또는 최소 시간이 아닌 최대 시간으로 참조됩니다). PhysicalMemoryLimitPercentage
을 100 %로 설정하면 물리적으로 설치된 메모리를 참조하고 사용 가능한 전체 가상 메모리를 참조하지 않으므로 문제가 해결되지 않습니다. 아니면 내가 틀렸고 정말로 도움이 되었습니까?
귀하의 질문은 주기적으로 캐시를 늘리거나 일부 값을 제거하라는 메시지를 표시합니다. 영원히 캐시를 채울 수 없습니다. – lucky
아마 당신은 정적 ConcurrentDictionary를 대신 사용하고 싶습니까? – Magnus
'CacheItemPolicy'에는 설정할 수있는 [Priority] (https://msdn.microsoft.com/en-us/library/system.runtime.caching.cacheitempolicy.priority (v = vs.110) .aspx) 속성이 있습니다. 'NotRemovable'. –