![]() |
AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code
Zitat:
Darf das Vorgabe Objekt auch umgestellt werden? Es ist für mich vom System schon falsch... Wer will schon ein Cache den er "per Hand" ansprechen muss... Der Cache sollte so funktionieren, dass er bei Ansprache eines Objectes automatisch arbeiten kann... |
AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code
Zitat:
Am einfachsten würde ich das so lösen: Die Systems.Generics.Collections.TDictionary-Klasse nehmen, kopieren und alles Generische entfernen, damit es mit Delphi 7 kompilierbar wird. An den Stellen (z. B. Add), wo auf den FGrowThreshold geprüft wird, zusätzlich die MaxSize mit ins Spiel bringen. Fragen: Was soll passieren, wenn die MaxSize erreicht wird und man weitere Elemente hinzufügt? Solls eine Exception geben? Was soll passieren, wenn ich das selbe (!) Objekt unter verschiedenen Schlüsseln hinzufüge? Welches Element soll eigentlich zurückgeben werden, wenn ich hinter einen Schlüssel 2..N Elemente gespeichert habe? Ich verlange auch einen Testfall! |
AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code
Zitat:
|
AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code
Zitat:
Zitat:
|
AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code
In der Praxis würde ich auch ein TDictionary nehmen und die Größe halt im Code auf MaxSize begrenzen. Ich würde auch nebenbei eine Statistik mit den den Aufrufen (Hits) führen und nur bei Überschreitung von MaxSize das Element mit den wenigsten Hits löschen, um das neue einzufügen. Ist aber vielleicht am Thema vorbei ...
|
AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code
Zitat:
Vielleicht sollte man eine ![]() |
AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code
[OT] Fiel mir grad so ein, als ich das hier las:
![]() |
AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code
Wo hast Du das denn schon wieder her :lol:
Ich hatte meinen Ansatz mit der MRU-Strategie ('Most Recently Used') umgesetzt, so wie sie im SQL-Server zum Einsatz kommt. Sie ist verblüffend einfach. In einer Dictionary werden die gecachten Objekte vorgehalten. Zusätzlich sind sie in einer verketteten Liste verbunden. Wird der Cache zu voll, werden die Items, die am Ende der Liste sind, entfernt (aus der Liste und dem Dictionary). Wenn ein Item eingefügt wird, kommt es an den Anfang der Liste. Ebenso, wenn ein Item abgefragt wird. So enthält die Liste vorne die Elemente, die in der Tendenz öfter oder vor kurzem abgefragt wurden und hinten sind eher die Elemente, die schon länger keine Sau mehr interessieren. Und das sind dann genau die, die verschwinden. Das kann man dann alles wunderbar testen. Bezüglich der 'Vorgaben'... Ich habe einfach mal angefangen. Und der kleinste Nenner wäre etwas ohne Generics. Ich denke, eine entsprechende Implementierung ist davon unabhängig, aber sinnvoller wäre natürlich eine, die wirklich wiederverwendbar wäre, und das geht nun mal nur mit Generics. Bezüglich der Testsuite... Das wäre wirklich optimal, aber ich hab keine ;-( Ich poste später vielleicht meinen Ansatz. Nur sitze ich bei 36°C und da denkt man nicht direkt daran, alten Code rauszukramen und zu reinigen. |
AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code
Zitat:
Beim Zugriff auf ein Element, das nicht im Cache ist, sollte das Nachladen meines Erachtens durch die Klasse selbst erledigt werden - z.B. durch eine Callback-Routine, die beim Create übergeben wird. |
AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz