문제

고유 한 키를 지정했지만 다음 코드는 5 개의 요청에 대해 하나의 값을 반환 한 다음 다른 커플에 대해 하나의 값을 반환 한 다음 원래 요청에 저장된 값으로 되돌아 가고 다른 객체 모두가 10 개가 될 때까지 계속 되돌아갑니다. 동일한 키 아래에 저장됩니다. 그런 다음이 값 중 어느 것이 캐시에서 돌아올 지 거의 무작위로 보입니다.

string strDateTime = string.Empty;
string cachename = "datetimeexample";
object cachedobject = HttpRuntime.Cache.Get(cachename);
if (cachedobject != null)
    strDateTime = (string)cachedobject;
else
{
    strDateTime = DateTime.Now.ToString();
    HttpRuntime.Cache.Insert(cachename, strDateTime, null, DateTime.MaxValue, TimeSpan.FromDays(10), CacheItemPriority.NotRemovable, null);
}
Response.Write(strDateTime +"        keys:"+ HttpRuntime.Cache.Count);

매우 혼란스러워, 이것은 나사산이나 무언가 때문입니까?

도움이 되었습니까?

해결책

서버 팜의 가능성과로드 밸런싱의 가능성을 무시하면이 동작은 응용 프로그램 풀이 웹 가드. MSDN의 관련 섹션을 인용하려면 :

Web Gardens는 여러 프로세스를 사용할 수 있으므로 각 프로세스에는 자체 응용 프로그램 사본, 처리 중과 세션 상태, 캐시 및 정적 데이터가 있습니다. 웹 정원은 특히 상태를 유지 해야하는 경우 모든 응용 프로그램에 사용해서는 안됩니다. 웹 정원 모드가 적절한 지 여부를 결정하기 전에 응용 프로그램의 성능을 벤치마킹하십시오.

이로 인해 캐싱이 동일한 키에 대해 여러 값을 저장하는 것처럼 보이게됩니다. 캐시에 효과적으로 중복 항목이 있습니다.

IIS 7 에서이 문제를 해결하려면 응용 프로그램 풀을 엽니 다. 고급 설정 그리고 설정 최대 작업자 프로세스 IIS 6의 경우 MSDN 기사 (예쁜 스크린 샷 포함).

8 개월 늦었음에도 Web-Garden Gotchas에 관한이 괜찮은 기사. 바라건대이 답변은 미래의 검색 자들에게 많은 시간을 절약 할 수 있기를 바랍니다. :)

다른 팁

캐시 키는 항상 'datetimeexample'이므로 항상 캐시에 하나의 객체가 있습니다. 그리고 당신은 항상 그 물체를 다시받을 것입니다.

나는 당신이 여기서 무엇을 성취하려고하는지 잘 모르겠습니다. 내가 염려하는 한, 이것은해야 할 방식으로 정확하게 행동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top