2012-04-17 2 views
3

약 10,000 개의 불변 개체를 처리하는 C# 응용 프로그램이 있습니다. 각 개체의 크기는 50KB - 1MB입니다. 응용 프로그램은 모든 작업에 대해 약 10-100 개의 개체를 선택합니다. 어떤 개체가 선택되는지는 상황과 사용자 선택에 따라 다르지만 매우 자주 사용되는 개체가 몇 가지 있습니다.인기있는 기반 캐싱을위한 솔루션

모든 개체를 항상 메모리에 유지하는 것은 너무 많은 일이지만 디스크 액세스 시간이 길어지고 있습니다. 디스크 활동을 줄이기 위해 인기 기반 캐시를 사용하고 싶습니다. 캐시에는 max가 포함됩니다. 300 개체. 나는 사용 패턴 중에 어느 것이 캐싱되어야 하는지를 결정할 것으로 기대한다. 각 객체에 액세스 카운터를 쉽게 추가 할 수 있습니다. 더 인기있는 것들이 들어 오면 덜 인기있는 것들은 캐시를 떠나야합니다. 내 엉덩이를 코딩하지 않고도 쉽게 할 수있는 독창적 인 방법이 있습니까?

답변

1

글쎄 System.Runtime.Caching을 사용할 수 있습니다. 캐시가 유효한 시간을 지정할 수있는 시간 후에 cahced 오브젝트가 변경되면 지속적으로 사용되는 오브젝트를 캐시하십시오. cahce가 유효하지 않으면 이벤트 처리기에서 캐시를 다시 작성할 수 있습니다.

캐시를 재구 축할 때 일부 스레드 동기화 메커니즘을 사용해야합니다.

+1

+1 바퀴를 재발 명하지 않았기 때문에 +1. OP가 캐시에서 가장 자주 사용되는 항목을 우선적으로 유지하는 슬라이딩 만료를 사용하려고한다는 것을 아는 것이 중요합니다. –

1

나는 WeakReferences으로 가고 싶다 : 몇 분 만에 간단한 캐시 관리자를 구축하고 .NET이 실제 메모리 관리를 처리하도록 할 수있다.

프로그램에서 사용하려는 메모리 양을 제한해야하는 경우 최적의 솔루션이 아닐 수도 있지만 그렇지 않으면 체크 아웃 할 가치가 있습니다.

0

MemCached의 일과 같은 소리가납니다! 이것은 무료 오픈 소스, 고성능 및 유연한 캐싱 솔루션입니다. http://www.memcached.org에서 다운로드 할 수 있습니다.

광범위한 개요를 보려면 https://en.wikipedia.org/wiki/Memcached에서 위키 피 디아 페이지를보십시오.

행운을 빈다.

관련 문제