MemoryCache Empty : 설정된 후 null을 반환합니다.
저는 새로운 것을 사용하는 MVC 3 앱에 문제가 있습니다.NET 4 시스템.런타임.메모리 캐시를 캐싱하는 중입니다.예측할 수 없는 것처럼 보이는 시간이 지나면 캐시가 중지되고 비어 있는 것처럼 작동한다는 것을 알 수 있습니다.ASP의 테스트 뷰에서 직접 가져온 이 코드를 생각해 보십시오.NET MVC:
MemoryCache.Default.Set("myname","fred", new CacheItemPolicy() { SlidingExpiration = new TimeSpan(0,5,0) });
Response.Write(MemoryCache.Default["myname"]);
작동하면 예상대로 "fred"가 인쇄됩니다.그러나, 문제가 발생하기 시작하면, 그럼에도 불구하고.Set()
의 MemoryCache.Default["myname"]
나는 이것을 증명할 수 있다 브레이크포인트를 설정함으로써Response.Write()
라인 및 직접 설정하고 즉시 창을 사용하여 캐시에서 읽기 - 설정하지 않고 null로 유지됩니다!이를 다시 작동시키는 유일한 방법은 AppDomain 재활용을 발생시키는 것입니다.
도 저는 할 때 이를 유발할 수 .Response.Write()
및 줄기서MemoryCache.Default.Dispose()
그 다음에는 메모리 캐시.기본값은 null 자체가 아니지만(왜 이것입니까?) 설정된 항목은 저장되지 않습니다.오류가 발생하지는 않지만 저장할 수 있는 내용은 없습니다.
누가 이것을 확인하고 설명할 수 있습니까?제가 발견한 바와 같이, 앱이 스스로 작동을 멈추면, 무언가가 처분하는 것입니다.MemoryCache.Default
하지만 내가 아닙니다!
갱신하다
음, 이제 이 문제에 질렸어요!CLRProfiler는 MVC 3에서 작동하지 않는 것 같습니다. SciTech의 CLR 도구는 좋았습니다. RedGate ANTS도 마찬가지였습니다.하지만 MemoryCache 개체가 무언가에 의해 폐기되고 있다는 것만 알려주었습니다!또한 (OutputCacheAttribute로 지정된) 캐시되어야 하는 페이지의 부분 보기가 몇 분 후에 캐시되지 않고 페이지를 호출할 때마다 새로 고쳐진다는 것을 타임스탬프 인쇄를 통해 증명했습니다.환경을 명확히 하기 위해 Win 7 Ultimate를 실행하는 개발 워크스테이션의 IIS 7.5 서버에서 직접 실행하고 있습니다.위에 언급된 메모리 도구는 재생 중인 객체의 측면에서 약 9MB의 메모리만 사용하고 있음을 시사합니다.
필사적으로 캐싱 코드를 변경하여 먼저 연결할 주변 HttpContext를 검색하고 캐싱 기능이 있는 경우 이 기능을 사용합니다.초기 테스트에서는 이것이 신뢰할 수 있다는 것을 보여주었지만, 그것은 끔찍한 해킹처럼 느껴집니다.
메모리 캐시 및 출력 캐시가 MVC 3과 함께 작동할 필요가 없다는 느낌이 듭니다...
자, 여기 몇 가지 소식이 있습니다.우리는 이것을 조사했고 네, 이것은 의 버그입니다.NET 4.
좋은 소식은 그것이 에 고정되었다는 것입니다.NET 4.5. 가능하면 설치를 로 업데이트합니다.NET 4.5는 견고합니다.
다른 좋은 소식은 이 수정 프로그램이 에 백포트되었다는 것입니다.NET 4 및 QFE(Quick Fix...a One off fix 적용) #578315.며칠 전에 백포트/수리가 완료되었으며 최대한 빨리 출고될 것입니다.정확한 날짜를 잡으려고 노력해 보겠지만, 곧입니다.
또 다른 좋은 소식은 이 문제에 대한 해결책이 있다는 것입니다.QFE 이전의 NET 4.해결 방법이 이상하지만 차단을 해제할 수 있습니다.
using (ExecutionContext.SuppressFlow()) {
// Create memory cache instance under disabled execution context flow
return new YourCacheThing.GeneralMemoryCache(…);
}
이게 도움이 되길 바랍니다.
업데이트: 핫픽스는 http://support.microsoft.com/kb/2828843 이며 여기에서 요청할 수 있습니다. https://support.microsoft.com/contactus/emailcontact.aspx?scid=sw;%5BLN%5D;1422
우리는 같은 문제를 가지고 있습니다.일정 시간 후 캐시가 폐기되었음을 확인합니다.사유지입니다 _처분이 1이 되었습니다.나는 내가 캐시할 통화가 없다고 확신합니다.내 코드로 처리합니다.그러나 Reflector를 사용하여 MemoryCache의 코드를 살펴보니 생성자에서 두 개의 이벤트에 대해 서브스크립션을 수행합니다.
domain.DomainUnload += eventHandler;
domain.UnhandledException += exceptionEventHandler;
private void OnAppDomainUnload(object unusedObject, EventArgs unusedEventArgs)
{
this.Dispose();
}
private void OnUnhandledException(object sender, UnhandledExceptionEventArgs eventArgs)
{
if (!eventArgs.IsTerminating)
return;
this.Dispose();
}
이 두 이벤트 처리기는 모두 폐기를 호출합니다.IIS에서 일부 도메인을 재활용한 후 도메인 언로드를 발생시키지만 캐시를 메모리에 보관합니다(가능하면 잘 모르겠습니다).
저도 똑같은 증상을 겪고 있습니다.드디어 시스템을 사용하게 되었습니다.Web.Cache 클래스 대신 HttpContext를 후크합니다.캐시. 지난 3일간 완벽하게 작동하고 있습니다.
동일한 문제와 관련된 링크도 참조하십시오.
폴링 후 메모리 캐시가 삭제됨WebApp에서 통합 파이프라인 모드로 사용할 때의 간격
메모리 캐시가 마법처럼 폐기됨 상태가 됨
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/1233ffb3-6480-431b-94ca-1190f96cf5f6
그MemoryCache
메모리 제한에 도달하면 항목이 자동으로 제거됩니다.고객님의 경우에도 이런 일이 있을 수 있는데, 혹시 캐시에 아이템이 많이 있나요?
구성을 사용하여 제한을 제어할 수 있습니다.기본적으로 사용 가능한 메모리를 기반으로 최적화됩니다.
물론입니다.Dispose
멈출 것입니다.MemoryCache
관리되지 않는 리소스를 모두 정리하여 폐기할 수 있도록 인스턴스 작업을 수행합니다.전화만 해야 합니다.Dispose
만약 당신이 그것을 사용할 의도가 없다면.MemoryCache
더이상.저는 이것이 당신의 경우에 문제가 될 필요는 없다고 생각합니다, 당신이 그것을 부를 때를 제외하고요.
언급URL : https://stackoverflow.com/questions/7422859/memorycache-empty-returns-null-after-being-set
'programing' 카테고리의 다른 글
Rails 3.1은 뒤로 버튼을 사용할 때 원시 Javascript 코드를 반환합니다. (0) | 2023.08.26 |
---|---|
Ajax를 통해 게시를 수행할 때 JSON 결과 대신 Bad Request가 반환됩니다. (0) | 2023.08.26 |
Github에 푸시할 때 Git 푸시가 중단됩니까? (0) | 2023.08.26 |
도커 파일 CMD 내의 변수를 사용하려면 어떻게 해야 합니까? (0) | 2023.08.26 |
PHP AES 암호화/암호 해독 (0) | 2023.08.26 |