이 있습니까 내가 사전 클래스를 사용하여 간단한 캐시를 구현 한 :다음 코드/디자인 동시성 문제
private Dictionary<int, byte[]> cache = new Dictionary<int, byte>();
public void SetPicture(int id, byte[] bytes)
{
cache[id] = bytes;
}
public byte[] GetPicture(int id)
{
if (cache.Contains(id)) {
return cache[id];
}
return null;
}
SetPicture은 단일 백그라운드 스레드에서 호출됩니다. 이 백그라운드 스레드는 활성 디렉터리 쿼리에서 사용자 프로필 사진을 업데이트합니다.
GetPicture는 다른 여러 스레드 (HTTP 요청을 처리하는 스레드)에서 호출됩니다.
항목이 캐시에서 절대 제거되지 않습니다.
이 코드는 안전한 스레드입니까? 또는 SetPicture에서 내부 사전에 대한 액세스를 차단해야합니까?
ReaderWriterLockSlim은 재미있어 보입니다. 읽기는 일반적이며 쓰기는 거의 없습니다. – GarethOwen
'포함/획득'경쟁 조건과 관련하여 - 이것은 실제로 제 경우의 문제입니까? 왜냐하면 캐시에서 항목을 제거하지 않기 때문입니다 (공용 인터페이스에서는 제공하지 않음). – GarethOwen
@GarethOwen 당신은 아마 괜찮을 것입니다. 그러나'TryGetValue'가 더 효율적입니다 ** 어쨌든 ** - 그럴 수도 있습니다. –