2014-10-13 3 views
2

.NET의 MemoryCache 클래스를 사용하여 응용 프로그램 내에서 데이터를 캐시합니다. 대부분의 응용 프로그램의 유스 케이스에서 절대 및/또는 슬라이딩 만료 캐시 정책이 내 응용 프로그램에 유용합니다. 그러나 특정 기간에는 응용 프로그램 데이터를 업데이트하지 않는 장기 실행 프로세스가 시작될 수 있습니다. 일반적으로 프로세스가 너무 길어 캐시가 만료되고이 프로세스 중에 캐시 된 데이터를 소멸시킵니다. 즉 캐시에 데이터가 실제로 남아 있기를 원할 때입니다. 일시적으로 MemoryCache의 만료 및/또는 청소를 일시 중지 할 수있는 방법이 있습니까?특정 기간 동안 MemoryCache 만료를 일시 중단 할 수있는 방법이 있습니까?

내 항목을 모두 버리고 만료 정책을 하나씩 바꿀 수는 있지만 캐시에있는 항목이 수백만 개가 아니더라도 수십만 개가 있다고 가정 할 때 두려운 것입니다. 성능 관점에서 작업하십시오.

캐시 엔트리를 CacheEntryRemovedCallback의 캐시에 다시 넣는 것이 좋겠지 만, 시스템을 사용하는 것보다 시스템을 다루는 것처럼 보이며 스레드로부터 안전하지는 않습니다.

모든 아이디어를 얻을 수 있습니다.

+3

이것은 다소 광범위합니다. 특정 코드가 없으면 캐시를 사용하는 것에 대해 매우 광범위한 권장 사항이 제공 될 수 있습니다. 예를 들어, 이런 것들을 붙들기 위해 '강제로'하려고하지 마십시오. 그리고 너무 많이 저장되어 있다면, 다른 전략을 고려하십시오. –

+0

어떤 대안 전략을 제안 하시겠습니까? 내가 말했듯이, MemoryCache는 내가 필요로하는 많은 양의 아이템을 유지하는 데 아주 능숙하며, 유스 케이스의 95 %에 대한 매력처럼 작동합니다. – afeygin

+0

글쎄, 당신은 아마 그것을 이미 한계에 밀고있다. * 캐시 *입니다. 영구 메모리 저장소가 아닙니다. 특정 코드를 기반으로 훨씬 더 집중된 질문이 필요합니다. 이것에 관해 당신에게 도움이되는 일반적인 조언을 줄 수는 없습니다. –

답변

0

Memcached 또는 NCache는 유사한 방식으로 만료를 지원하는 플랫 메모리 캐싱 시스템입니다. 데이터/캐시 제공자 인 Lib은 만료시에 다시 채울 지능이 있어야합니다.

MemoryCache에 대해 InfiniteAbsoluteExpiration 정책을 사용할 수 있지만 영원히 유지됩니다. 또는 자신의 Caching Lib을 작성하십시오. MemoryCache 타이머를 만료 검사에 사용합니다. 당신은 당신이 알고있는 버전을 확장 논리로 사용할 수 있습니다.

사용자 지정 정책 확장 개체에 항목을 만료하기 위해 응용 프로그램 프로세스 이벤트를 구독하려면 대리인이 있어야합니다.

행운을 빌어 요. - 스리니