Я працюю над додатком .NET 4.0, який виконує досить дорогий розрахунок у двох пар, повертаючи дубль. Цей розрахунок проводиться для кожної з декількох тисяч позицій . Ці обчислення виконуються в a Task
на різьбовій нитці.
Деякі попередні тести показали, що однакові обчислення проводяться знову і знову, тому я хотів би кешувати n результатів. Коли кеш заповнений, я хотів би викинути найменш часто використовуваний останнім часом предмет. ( Редагувати: я зрозумів, що найменше - часто не має сенсу, тому що коли кеш заповнений, і я заміню результат на щойно обчислений, той буде найменш часто використаний і негайно замінений наступного разу, коли буде розрахований новий результат і додано в кеш)
Для того, щоб реалізувати це, я думав використовувати Dictionary<Input, double>
(де Input
був би міні-клас, що зберігає два вхідні подвійні значення) для зберігання вхідних даних та кешованих результатів. Однак мені також слід би відслідковувати, коли результат був використаний востаннє. Для цього я думаю, що мені знадобиться друга колекція, що зберігає інформацію, яку мені знадобиться, щоб видалити результат із довідника, коли кеш набирався. Я стурбований тим, що постійне упорядкування цього списку негативно вплине на ефективність роботи.
Чи є кращий (тобто ефективніший) спосіб зробити це чи, можливо, навіть загальна структура даних, про яку я не знаю? Які речі я повинен профайлювати / вимірювати, щоб визначити оптимальність свого рішення?