Tôi đang làm việc trên một ứng dụng .NET 4.0, thực hiện một phép tính khá tốn kém trên hai nhân đôi trả lại gấp đôi. Tính toán này được thực hiện cho mỗi một trong vài ngàn mục . Những tính toán này được thực hiện trong một Task
luồng trên luồng.
Một số thử nghiệm sơ bộ đã chỉ ra rằng các phép tính tương tự được thực hiện lặp đi lặp lại, vì vậy tôi muốn lưu trữ kết quả n . Khi bộ nhớ cache đầy, tôi muốn loại bỏ mục ít được sử dụng gần đây nhất. ( Edit: Tôi nhận ra kém thường không có ý nghĩa, bởi vì khi bộ nhớ cache là đầy đủ và tôi sẽ thay thế Kết quả là với một mới tính toán, mà người ta sẽ được ít nhất thường được sử dụng và ngay lập tức thay thế thời gian tới một kết quả mới được tính và thêm vào bộ đệm)
Để thực hiện điều này, tôi đã nghĩ đến việc sử dụng một Dictionary<Input, double>
(trong đó Input
sẽ là một lớp nhỏ lưu trữ hai giá trị kép đầu vào) để lưu trữ các đầu vào và kết quả được lưu trong bộ nhớ cache. Tuy nhiên, tôi cũng cần theo dõi khi nào kết quả được sử dụng lần cuối. Đối với điều này, tôi nghĩ rằng tôi sẽ cần một bộ sưu tập thứ hai lưu trữ thông tin mà tôi sẽ cần để xóa một kết quả khỏi dictonary khi bộ đệm đã đầy. Tôi lo ngại rằng việc liên tục giữ danh sách này được sắp xếp sẽ ảnh hưởng tiêu cực đến hiệu suất.
Có cách nào tốt hơn (tức là hiệu quả hơn) để làm điều này, hoặc thậm chí có thể là một cấu trúc dữ liệu phổ biến mà tôi không biết? Những loại điều tôi nên được định hình / đo lường để xác định sự tối ưu của giải pháp của tôi?