SOG-Helpcenter Logo SOG Business - Software

Objectcaching


 

Beschreibung


Um Verarbeitungszeiten gering zu halten sollten mehrfach verwendete Objekte gecacht, das heißt für weitere Verwendung eine Zeit lang aufbewahrt werden.

Bei dem Caching von Objekten ist allerdings zu beachten, dass aufgrund von bestimmten Ereignissen eine Aktualisierung eines Objektes erforderlich werden kann, und dass nicht eine unendliche Anzahl von Objekten eine unendliche Zeit gespeichert werden sollte, um "Object Leaks" also "Objektleichen - Objekte die nicht mehr gebraucht werden, auf die jedoch noch Referenzen existieren" zu vermeiden.

Da das .NET Framework 1.1 selbst nur in den Web-Klassen entsprechende Mechanismen anbietet, wurde für die SOG C# Programmierung ein einfach zu handhabender Weg zum Cachen von Objekten realisiert.

Erzeugen eine Caches


Ein Objektcache kann durch Erzeugen eines Objektes der Klasse SOGCache angelegt werden:

    public SOGCache<hhpxAwl> caAwl=new SOGCache( 500, new TimeSpan(0,0,30,0,0) );

Als Parameter wird die maximale Anzahl von gecachten Objekten angegeben, sowie ein Zeitraum, den diese Objekte maximal gespeichert werden. Wird als Anzahl "0" angegeben, ist die Anzahl nicht begrenzt, wird als Zeitraum "TimeSpan.MaxValue" angegeben, wird die Zeitdauer der Speicherung nicht eingeschränkt.

Ablegen von Objekten im Cache


Für das Ablegen und Auffinden von Objekten in einem Cache ist natürlich ein Schlüssel notwendig, der ein Objekt eindeutig identifiziert. Über diesen Schlüssel kann geprüft werden, ob das Objekt schon/noch im Cache vorhanden ist. Ist es nicht da, sollte es angelegt und in in den Cache eingetragen werden:

    hhpxAwl Awl = caAwl.Get(Name);
    if ( Awl==null )
    {
        Awl = new hhpxAwl( Name, .... );
        caAwl.Set( Name, Awl );
    }

Über die "Get()" Methode wird zuerst geprüft, ob ein Objekt des gewünschten Namens vorhanden ist. Ist dies nicht der Fall, wird es angelegt, und im Cache gespeichert.

Definition von externen Abhängigkeiten


Häufig ist es sinnvoll, ein gecachtes Objekt zu verwerfen, wenn sich die Originaldaten, die zur Erstellung des Objektes notwendig waren, verändert haben. Wird ein Objekt z.B. durch lesen einer Datei erstellt, kann eine Abhängigkeit definiert werden, die dafür sorgt, dass bei Änderung der Datei das Objekt automatisch neu erstellt wird.

    caAwl.Set(Name,Awl,new SOGCacheFileDependency(
           Awl.BaseFile,new TimeSpan(0,0,0,10,0)));

In diesem Beispiel wird dem gecachten Objekt noch ein Objekt der Klasse "SOGCacheFileDependency" mitgegeben, das dafür sorgt, dass jeweils bei Veränderung der "Awl.BaseFile"-Datei das Objekt erneut gelesen wird. Die Prüfung auf Veränderung der Datei erfolgt jeweils nach 10 Sekunden (TimeSpan).

Eigene Abhängigkeitenklassen können durch Implementierung der Schnittstelle "ISOGCacheDependency" erzeugt werden.