2017-01-31 7 views
4

닷넷의 MemoryCache 퇴거는 언제 발생합니까? 콘솔 응용 프로그램에서 퇴거를 시뮬레이트하려면 어떻게해야합니까? 추방이 발생할 때까지 객체를 메모리 캐시에 추가하려고 할 때마다 대신 OutofMemoryException이 발생합니다.닷 넷 메모리 캐시 퇴거

+0

[MemoryCache가 구성의 메모리 제한을 준수하지 않음]의 가능한 복제본 (http://stackoverflow.com/questions/6895956/memorycache-does-not-obot-memory-limits-in-configuration) –

답변

2

에 값을 전달하지 않거나 기본 인스턴스를 사용하는 경우 기본 동작을 제어하는 ​​내용 인 MemoryCacheElement을 참조하십시오.

MemoryCacheElement의 기본값을 살펴보면 2 분마다 확인합니다 (그러나 더 빨리 진행됩니다) the closer you are to the high pressure limit. timer's callback 안에 들어가면 메모리 캐시를 잘라 내기 위해 백분율을 계산 한 다음 계산 된 비율을 사용하여 MemoryCache.Trim(Int32)을 호출합니다.

the percentage calculation에 주목할 사항 중 하나는 Gen 2 가비지 수집이 발생하지 않은 경우 캐시가 자체적으로 축소를 시도하지 않는다는 것입니다.

Gen 2 콜렉션이 발생하기 전에 모든 테스트 콘솔 프로그램을 실행하는 방식으로 메모리가 모두 소모되었거나 처음 2 분 느린 모드에서 메모리가 부족해지기 전에 확인할 수있는 가능성이 매우 높습니다 밖으로 항목. 당신이 퇴거를 시뮬레이션하려는 경우

단지

MemoryCache.Default.Trim(50); 

전화 그리고 그 기본 캐시에서 캐시의 절반을 퇴거 할 것이다.