Wie kann ich Methoden-Signatur-Caching durchführen?

8

Ich baue eine App in .NET und C #, und ich möchte einige der Ergebnisse durch die Verwendung von Attributen / Annotationen anstelle von explizitem Code in der Methode zwischenspeichern.

Ich hätte gerne eine Methodensignatur, die ungefähr so ​​aussieht:

%Vor%

Er sollte basierend auf den Eingaben einen Hashwert erstellen und diesen als Schlüssel für das Ergebnis verwenden. Natürlich würde es eine Konfigurationsdatei geben, die ihm mitteilt, wie man ein Memcache oder ein lokales Wörterbuch einfügt.

Kennst du einen solchen Rahmen?

Ich wäre sogar an einem für Java interessiert

    
Sebastian Vilstrup 05.07.2010, 15:34
quelle

2 Antworten

13

Mit CacheHandler in Microsoft Enterprise Library können Sie dies problemlos erreichen. Zum Beispiel:

%Vor%

würde alle Aufrufe dieser Methode für 30 Minuten zwischenspeichern. Alle Aufrufe erhalten einen eindeutigen Cacheschlüssel, der auf den Eingabedaten und dem Methodennamen basiert. Wenn Sie die Methode also zweimal mit verschiedenen Eingaben aufrufen, wird sie nicht zwischengespeichert, aber wenn Sie sie einmal innerhalb des Timout-Intervalls mit der gleichen Eingabe aufrufen Die Methode wird nur einmal ausgeführt.

Ich habe dem Code von Microsoft einige zusätzliche Funktionen hinzugefügt:

Meine modifizierte Version sieht so aus:

%Vor%

Microsoft verdient den meisten Dank für diesen Code. Wir haben nur Sachen hinzugefügt wie Zwischenspeichern auf Anforderungsniveau anstatt über Anfragen (nützlicher als du denkst) und einige Fehler behoben (z. B. gleiche DateTime-Objekte, die auf verschiedene Werte serialisieren).

    
Yrlec 05.07.2010 15:48
quelle
1

Genau das zu tun, was Sie beschreiben, d. h. schreiben

%Vor%

und mit nur einem Aufruf des teuren Aufrufs und ohne die Klasse mit einem anderen Code (fx CacheHandler<MyClass> c = new CacheHandler<MyClass>(new MyClass()); ) umhüllen zu müssen, müssen Sie in ein Aspektorientierte Programmierung framework. Diese arbeiten normalerweise, indem Sie den Byte-Code neu schreiben, also müssen Sie Ihrem Kompilierungsprozess einen weiteren Schritt hinzufügen - aber Sie gewinnen dabei viel Kraft. Es gibt viele AOP-Frameworks, aber PostSharp für .NET und AspectJ gehören zu den beliebtesten. Sie können Google einfach dazu verwenden, den gewünschten Caching-Aspekt hinzuzufügen.

    
Rasmus Faber 05.07.2010 16:06
quelle

Tags und Links