2010-11-29 4 views
7
ASP.NET에서 캐싱이 보이는

는 연관 배열의 어떤 종류를 사용 .

그러나 캐시 값을 지울 수있는 캐시 지우기 기능을 구현하고 싶습니다. 여기서 전체 키 이름은입니다. 여기에 연관 배열이있는 것 같습니다 (?)

저장된 캐시 키와 에 간단한 논리를 수행하는 방법을 알아낼 수있는 사람이 있습니까? 여기에 난 무엇 후 :

static void DeleteMatchingCacheKey(string keyName) { 
    // This foreach implementation doesn't work by the way ... 
    foreach(Cache as c) { 
     if(c.Key.Contains(keyName)) { 
      Cache.Remove(c); 
     } 
    } 
} 
+0

캐시가 당신의 통제 아래 :

대신 캐시 키를 통해 while 루프에 대한 간단한 사용? –

답변

5

foreach는 루프는 컬렉션에서 항목을 제거하도록 허용하지 않습니다 열거를 사용에 의존 형 - 모든 모음에서 항목을 제거 할 때 (foreach는 루프를 사용하지 마십시오 열거자는 반복되는 컬렉션에 항목이 추가되거나 제거되는 경우 예외를 throw합니다. - 왜 당신이 거기에있는 사물의 이름을 알고하지 않을

int i = 0; 
while (i < Cache.Keys.Length){ 
    if (Cache.Keys(i).Contains(keyName){ 
     Cache.Remove(Cache.Keys(i)) 
    } 
    else{ 
     i ++; 
    } 
} 
+0

이 스레드로부터 안전한가요? 이 코드가 실행되는 동안 다른 스레드가 캐시를 수정 (예 : 캐시에서 항목 추가 또는 삭제)하면 어떻게 될까요? –

+1

Cache 클래스는 스레드로부터 안전하기 때문에이 코드는 예외를 throw하지 않습니다. 그러나 Cache.Keys.Length를 마지막으로 확인한 후 Cache.Add()를 호출하면 캐시에서 모든 항목이 제거되지 않을 수 있습니다. – WiseGuyEh

+4

Cache.Keys를 해결할 수 없습니다. – theusguy