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