Ich arbeite an einer .NET 4.0-Anwendung, die eine ziemlich teure Berechnung für zwei Doubles durchführt, die ein Double zurückgeben. Diese Berechnung wird für jedes von mehreren tausend Elementen durchgeführt . Diese Berechnungen werden in Task
einem Threadpool-Thread ausgeführt.
Einige vorläufige Tests haben gezeigt, dass dieselben Berechnungen immer wieder durchgeführt werden, daher möchte ich n Ergebnisse zwischenspeichern. Wenn der Cache voll ist, möchte ich das am wenigsten häufig verwendete Element wegwerfen . ( Bearbeiten: Ich habe festgestellt, dass es am seltensten keinen Sinn macht, denn wenn der Cache voll ist und ich ein Ergebnis durch ein neu berechnetes ersetzen würde, würde dieses am seltensten verwendet und beim nächsten Berechnen eines neuen Ergebnisses sofort ersetzt und zum Cache hinzugefügt)
Um dies zu implementieren, dachte ich darüber nach, eine Dictionary<Input, double>
(wo Input
eine Miniklasse wäre, in der die beiden Eingabedoppelwerte gespeichert werden) zu verwenden, um die Eingaben und die zwischengespeicherten Ergebnisse zu speichern. Ich müsste jedoch auch nachverfolgen, wann ein Ergebnis das letzte Mal verwendet wurde. Dafür würde ich wahrscheinlich eine zweite Sammlung benötigen, in der die Informationen gespeichert sind, die ich benötige, um ein Ergebnis aus dem Diktat zu entfernen, wenn der Cache voll ist. Ich bin besorgt, dass eine ständige Sortierung dieser Liste die Leistung beeinträchtigen würde.
Gibt es eine bessere (dh performantere) Möglichkeit, dies zu tun, oder vielleicht sogar eine gemeinsame Datenstruktur, die mir nicht bekannt ist? Welche Art von Dingen sollte ich profilieren / messen, um die Optimalität meiner Lösung zu bestimmen?