Ben bir çift dönen iki çift üzerinde oldukça pahalı bir hesaplama gerçekleştiren bir .NET 4.0 uygulaması üzerinde çalışıyorum. Bu hesaplama birkaç bin maddeden her biri için yapılır . Bu hesaplamalar Task
bir threadpool iş parçacığında bir yapılır.
Bazı ön testler, aynı hesaplamaların tekrar tekrar yapıldığını göstermiştir, bu nedenle n sonuçlarını önbelleğe almak istiyorum . Önbellek dolduğunda, ben en az önemlisi dışarı atmak istiyorum sıklıkla son kullanılan öğeyi. ( Düzenleme: En azından çoğu zaman mantıklı gelmediğini fark ettim, çünkü önbellek dolu olduğunda ve bir sonucu yeni hesaplanmış bir sonuçla değiştirdiğimde, en az sıklıkla kullanılır ve bir sonraki yeni sonuç hesaplandığında hemen değiştirilir ve önbelleğe eklendi)
Bunu uygulamak için, ben kullanmayı düşünüyorum Dictionary<Input, double>
( Input
girdileri ve önbelleğe alınan sonuçlar saklamak için iki giriş çift değerleri depolamak olacak bir mini sınıf). Ancak, bir sonucun en son ne zaman kullanıldığını da izlemem gerekir. Bunun için önbellek doluyken dikdörtgenden bir sonucu çıkarmak için ihtiyacım olan bilgileri saklayan ikinci bir koleksiyona ihtiyacım olduğunu düşünüyorum. Bu listeyi sürekli tutmanın performansı olumsuz etkileyeceğinden endişe duyuyorum.
Bunu yapmanın daha iyi (yani daha performanslı) bir yolu var mı, belki de farkında olmadığım ortak bir veri yapısı var mı? Çözümümün en uygunluğunu belirlemek için ne tür şeyler profillemeliyim / ölçmeliyim?