Saya bekerja pada aplikasi .NET 4.0, yang melakukan perhitungan agak mahal pada dua ganda mengembalikan ganda. Perhitungan ini dilakukan untuk masing-masing dari beberapa ribu item . Perhitungan ini dilakukan di Task
atas threadpool thread.
Beberapa tes awal telah menunjukkan bahwa perhitungan yang sama dilakukan berulang-ulang, jadi saya ingin ke cache n hasil. Ketika cache penuh, saya ingin membuang item yang paling jarang digunakan. ( Sunting: Saya menyadari paling tidak sering tidak masuk akal, karena ketika cache sudah penuh dan saya akan mengganti hasil dengan yang baru dihitung, yang satu akan paling jarang digunakan dan segera diganti saat berikutnya hasil baru dihitung dan ditambahkan ke cache)
Untuk mengimplementasikan ini, saya berpikir untuk menggunakan Dictionary<Input, double>
(di mana Input
akan menjadi kelas mini yang menyimpan dua nilai ganda input) untuk menyimpan input dan hasil yang di-cache. Namun, saya juga perlu melacak kapan suatu hasil digunakan terakhir kali. Untuk ini saya pikir saya akan memerlukan koleksi kedua menyimpan informasi yang saya perlukan untuk menghapus hasil dari kamus ketika cache sudah penuh. Saya khawatir bahwa terus-menerus menjaga daftar ini diurutkan akan berdampak negatif pada kinerja.
Apakah ada cara yang lebih baik (yaitu lebih banyak pemain) untuk melakukan ini, atau mungkin bahkan struktur data umum yang tidak saya sadari? Jenis hal apa yang harus saya profil / ukur untuk menentukan optimalitas solusi saya?