.NET 4.0 응용 프로그램을 작성 중입니다.이 응용 프로그램은 두 배의 두 배에 대해 값 비싼 계산을 수행하여 배를 반환합니다. 이 계산은 수천 개의 항목 중 하나에 대해 수행 됩니다 . 이러한 계산은 Task
스레드 풀 스레드 에서 수행됩니다 .
일부 예비 테스트에서 동일한 계산이 반복적으로 수행되는 것으로 나타 났으므로 n 개의 결과 를 캐시하고 싶습니다 . 캐시가 가득 차면 가장 자주 사용하지 않는 항목 을 버리고 싶습니다 . ( 편집 : 캐시가 가득 차서 결과를 새로 계산 된 결과로 바꾸면 다음에 새로운 결과가 계산 될 때 가장 자주 사용되지 않고 즉시 대체되기 때문에 나는 종종 이해가되지 않는다는 것을 깨달았습니다 . 캐시에 추가)
이것을 구현하기 위해 입력과 캐시 된 결과를 저장하기 위해 (두 개의 입력 이중 값을 저장하는 미니 클래스가있는 Dictionary<Input, double>
곳) 을 사용하려고 생각했습니다 Input
. 그러나 결과가 마지막으로 사용 된 시점을 추적해야합니다. 이를 위해 캐시가 가득 찼을 때 디지털에서 결과를 제거하는 데 필요한 정보를 저장하는 두 번째 컬렉션이 필요하다고 생각합니다. 이 목록을 지속적으로 정렬하면 성능에 부정적인 영향을 줄 수 있습니다.
이 작업을 수행하는 더 나은 (즉, 성능이 더 좋은) 방법이 있습니까, 아니면 내가 모르는 일반적인 데이터 구조가 있습니까? 솔루션의 최적 성을 결정하기 위해 어떤 종류의 프로파일 링 / 측정을해야합니까?