1
MemoryCache 클래스가 작동하는 방식은 CachePolicy가 여전히 충족되어 있고 메모리 조건이 허용하는 한 메모리에 저장 한 내용을 유지하는 것이라고 생각했습니다.메모리가 부족할 때 MemoryCache에서 항목을 비우지 않는 이유는 무엇입니까?
일부 테스트를 실행 한 후 메모리 조건이 낮을 때 MemoryCache가 어떤 조치를 취했는지 확신 할 수 없습니다.
나는 콘솔 응용 프로그램에서 다음 코드를 실행할 수 있습니다
MemoryCache cache = MemoryCache.Default;
CacheItemPolicy p = new CacheItemPolicy()
{
AbsoluteExpiration = ObjectCache.InfiniteAbsoluteExpiration
};
for (int i=0; i < 1000000; i++)
{
Console.WriteLine(i);
string s = new string('0', 50000);
cache.Add(new CacheItem(i.ToString(), s), p);
}
에 대한 30K 반복 한 후, 나는 System.OutOfMemoryException 얻을.
MemoryCache와 GC가 메모리 조건이 낮을 때 저장된 객체를 해제하지 않는 이유는 무엇입니까?
캐시 삭제시 콜백을 추가했는데이를 알려주고 있습니다. 처리되지 않은 OutOfMemoryException이 throw되면 MemoryCache가 항목 삭제를 시작합니다. 물론 그때까지는 너무 늦었습니다. outofMemoryException을 처리하기 위해 try catch 블록을 추가하면 MemoryCache는 더 이상 항목을 삭제하지 않습니다. – Aheho
관찰이 행동을 변화시키는 것은 양자 입자 물리학과 같습니다. – Aheho