>

반사를 사용하는 코드를 작성 중입니다. 그래서 고가의 리플렉션 처리를 ConcurrentDictionary 에 캐시하려고합니다. . 그러나 이전 및 사용하지 않는 캐시 된 값을 저장하지 않도록 동시 사전에 제한 제한을 적용하고 싶습니다.

ConcurrentDictionary 의 크기를 제한하는 방법을 알아보기 위해 연구를했습니다. . 흥미로운 답변을 찾았지만 답변이 내 요구 사항에 맞는지 잘 모르겠습니다.

저는 Dapper 소스 코드에서 발견했습니다. ConcurrentDictionary 의 한계를 처리하기 위해 사용자 정의 코드를 만들었습니다. . Interlocked 와 함께 사용하는 수집 제한 상수가 있습니다. 사전의 동시성을 처리 할 수 ​​있어야합니다.

반면, 나는 SO에서 답변 을 찾았습니다. 와이즈 비즈  동시성을 처리합니다. .Net 소스 코드에서 동일한 구현인지 모르겠습니다.

dapper 구현 또는 SO 응답 구현으로 가야합니까?

ReaderWriterLockSlim

  • 답변 # 1

    "캐시 정보"에 관한 정확한 방법은 환경에 따라 다릅니다. 웹 개발과 같은 영역은 환경의 대규모 병렬 특성과 높은 수준의 분리 덕분에 완전히 다른 접근법이 필요합니다.

    그러나 캐싱을 수행하는 핵심은 WeakReference입니다. 강력한 참조는 GC에 의한 수집을 방지합니다. 약한 참조는 아니지만 강력한 참조를 얻을 수 있습니다. 프로그래머는 "이 목록을 위해서만 메모리에 보관하지 마십시오. 아직 수집하지 않았다면 참조하십시오.":

    https://msdn.microsoft.com/en-us/library/system.weakreference.aspx

    GC는 본질적으로 다른 모든 스레드가 일시 중지 된 경우에만 해당 mater에 대한 약한 참조를 수집하거나 태그 할 수 있습니다. 따라서 WeakReferences는 추가 경쟁 조건에 노출되어서는 안됩니다. 여전히 존재하고 있으며 강력한 참조가 있거나 그렇지 않습니다.

  • 이전 java - Spring Security CustomUser 인증되지 않은 세부 사항
  • 다음 검색 엔진 (google, yahoo)에 특정 웹 사이트가 지역별로 다르다고 말할 수 있습니까?