ฉันกำลังทำงานกับแอปพลิเคชั่น. NET 4.0 ซึ่งทำการคำนวณค่อนข้างแพงในสองครั้งที่ส่งคืนเป็นสองเท่า การคำนวณนี้จะดำเนินการอย่างใดอย่างหนึ่งหลายพันในแต่ละรายการ การคำนวณเหล่านี้ดำเนินการในTask
เธรดพูลเธรด
การทดสอบเบื้องต้นบางอย่างแสดงให้เห็นว่ามีการคำนวณแบบเดียวกันซ้ำแล้วซ้ำอีกดังนั้นฉันต้องการแคชผลลัพธ์n เมื่อแคชเต็มฉันต้องการที่จะโยนรายการที่ใช้บ่อยที่สุด ( แก้ไข:ฉันรู้น้อยที่สุด - ไม่สมเหตุสมผลเพราะเมื่อแคชเต็มและฉันจะแทนที่ผลลัพธ์ด้วยการคำนวณใหม่หนึ่งรายการนั้นจะใช้อย่างน้อยบ่อยครั้งและแทนที่ทันทีในครั้งถัดไปที่มีการคำนวณผลลัพธ์ใหม่ และเพิ่มลงในแคช)
เพื่อที่จะนำสิ่งนี้ไปใช้ฉันคิดว่าจะใช้ a Dictionary<Input, double>
(ซึ่งInput
จะเป็น mini-class ที่เก็บค่าสองค่าสองอินพุต) เพื่อเก็บอินพุตและผลลัพธ์ที่แคชไว้ อย่างไรก็ตามฉันจะต้องติดตามเมื่อมีการใช้ผลลัพธ์ครั้งล่าสุด สำหรับสิ่งนี้ฉันคิดว่าฉันต้องการคอลเล็กชันที่สองที่จัดเก็บข้อมูลฉันจะต้องลบผลลัพธ์ออกจาก dictonary เมื่อแคชเริ่มเต็ม ฉันกังวลว่าการเรียงลำดับรายการนี้อย่างสม่ำเสมอจะส่งผลเสีย
มีวิธีที่ดีกว่า (เช่นมีประสิทธิภาพมากกว่า) ในการทำเช่นนี้หรืออาจเป็นโครงสร้างข้อมูลทั่วไปที่ฉันไม่รู้จัก? ฉันควรทำโปรไฟล์ / การวัดประเภทใดเพื่อกำหนดประสิทธิภาพสูงสุดของการแก้ปัญหาของฉัน