AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Code-Kata: Cache-Klasse. Wer produziert den besten Code
Thema durchsuchen
Ansicht
Themen-Optionen

Code-Kata: Cache-Klasse. Wer produziert den besten Code

Ein Thema von Dejan Vu · begonnen am 30. Jul 2015 · letzter Beitrag vom 1. Aug 2015
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 10:45
Was seid ihr alle so schnell? Ich hätte immer häppchenweise was daran gemacht und wäre frühestens zum Wochenende fertig
Zu schnell... Auf jeden Fall...

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...
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 11:11
Auch wenn ich weiß, dass nicht alle Anforderungen erfüllt sind, will ich doch einen ersten Versuch posten.
Dein Ansatz hat aber ein paar klitzekleine Denkfehler:
Logo, so wirklich gelöst ist das natürlich nicht.

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!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#13

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 11:25
damit es mit Delphi 7 kompilierbar wird.
Ist das etwa eine Vorgabe?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 11:38
damit es mit Delphi 7 kompilierbar wird.
Ist das etwa eine Vorgabe?
Habe ich wegen folgenden Satz und dem Profil von Dejan Vu mal angenommen:
Obwohl so eine Klasse nach Generics schreit, wollen wir darauf verzichten und als ID-Type einen Integer verwenden. Der Cache soll beliebige TObject-Referenzen verwalten.
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

Registriert seit: 24. Nov 2004
Ort: Düsseldorf
192 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 11:38
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 ...
Thomas Forget
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#16

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 14:48
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 ...
Das ist eben die Frage: Geht es hier nur um die saubere Umsetzung von Cache-Verdrängungsstrategien oder auch um deren Auswahl. Für das zweite gibt es Unmengen an wissenschaftlicher Literatur. Afaik geht das aber an der Zielstellung von so einem Kata vorbei
Vielleicht sollte man eine Strategie vorgeben.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#17

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 15:09
[OT] Fiel mir grad so ein, als ich das hier las: http://martinfowler.com/bliki/TwoHardThings.html [/OT]
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#18

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 18:41
Wo hast Du das denn schon wieder her

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.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#19

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 20:59
Zu schnell... Auf jeden Fall...

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...
Ja, das sehe ich auch so.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#20

AW: Code-Kata: Cache-Klasse. Wer produziert den besten Code

  Alt 30. Jul 2015, 21:31
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.
So in der Art wäre auch mein Ansatz gewesen, bis ich realisierte, daß er gegen die Vorgabe verstößt (weshalb steht etwas weiter vorn im Thread). Schreib doch die Vorgabe einfach um:

Zitat:
Der Cache soll die maximal N zuletzt verwendeten Elemente im Speicher halten.
Der Satz mit Wahrscheinlichkeit und häufiger kann dann entfallen. Damit ist die Cache-Strategie klar definiert und es kommt nur noch auf die Implementierung an.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz