Ich habe eine C# WinForms-Anwendung mit einem Datenbank-Backend (Oracle) und verwenden NHibernate für O/R-Zuordnung. Ich möchte die Kommunikation zur Datenbank so weit wie möglich reduzieren, da das Netzwerk hier ziemlich langsam ist, also lese ich über Second-Level-Caching. Ich fand this quite good introduction, die die folgenden verfügbaren Cache-Implementierungen auflistet.NHibernate der Cache für WinForms-Anwendung verwenden
Ich frage mich welche Implementierung ich für meine Anwendung verwenden sollte.
Das Zwischenspeichern sollte einfach sein, es sollte das erste Auftreten einer Abfrage nicht wesentlich verlangsamen, und es sollte nicht viel Speicher belegen, um die implementierenden Assemblys zu laden. (Mit NHibernate und Schloss, nimmt die Anwendung bereits auf 80 MB RAM!)
- Geschwindigkeit: verwendet Microsoft Geschwindigkeit, die ein hoch skalierbare In-Memory ist Anwendungs-Cache für alle Arten von Daten.
- Prävalenz: verwendet Bamboo.Prevalence als Cache-Provider. Bamboo.Prävalence ist eine .NET-Implementierung des von Klaus Wüstefeld in Prevayler ins Leben gerufenen Objektprävalenzkonzepts. Bamboo.Prevalence bietet eine transparente Objektpersistenz für deterministische Systeme, die auf die CLR abzielen. Es bietet permanentes Caching für Smart-Client-Anwendungen.
- SysCache: Verwendet System.Web.Caching.Cache als Cache-Provider. Dies bedeutet, dass Sie sich auf das ASP.NET-Caching-Feature verlassen können, um zu verstehen, wie es funktioniert.
- SysCache2: Ähnlich wie NHibernate.Caches.SysCache verwendet ASP.NET-Cache. Dieser Provider unterstützt auch den SQL-Abhängigkeits-basierten Ablauf, dh es ist möglich, bestimmte Cache-Bereiche so zu konfigurieren, dass sie automatisch ablaufen, wenn sich die relevanten Daten in der Datenbank ändern.
- MemCache: verwendet memcached; memcached ist ein leistungsstarkes, verteiltes Speicherobjekt-Cachesystem, das generischen Ursprungs ist, jedoch zur Beschleunigung dynamischer Webanwendungen durch Entlastung der Datenbank gedacht ist. Im Grunde eine verteilte Hash-Tabelle.
- SharedCache: hochperformantes, verteiltes und repliziertes Caching-System für Speicherobjekte. Siehe hier und hier für weitere Informationen
Meine bisherigen Überlegungen waren:
- Geschwindigkeit scheint ziemlich Schwergewicht und viel des Guten (die Dateien vollständig nehmen 467 KB Speicherplatz, haben nicht die RAM gemessen es dauert so weit, weil ich es nicht geschafft habe, es laufen zu lassen, siehe unten)
- Prävalenz verlangsamt, zumindest in meinem ersten Versuch, meine Abfrage von ~ 0,5 Sekunden auf ~ 5 Sekunden, und Caching hat nicht funktioniert (siehe unten)
- SysCache scheint für ASP.NET zu sein, nicht für Winforms.
- MemCache und SharedCache scheinen für verteilte Szenarien zu sein.
Welchen würden Sie mir vorschlagen, zu verwenden? Es würde auch eine eingebaute Implementierung geben, die natürlich sehr leicht ist, aber der referenzierte Artikel sagt mir, dass "(...) niemals diesen Cache-Provider für Produktionscode verwenden sollte, sondern nur zum Testen.„
Neben der Frage, die am besten in meiner Situation passt ich auch Probleme konfrontiert mit ihnen Anwendung:
Geschwindigkeit darüber beschwert, dass“ dcacheClient“Tag in der Anwendungskonfigurationsdatei nicht angegeben Geben Sie einen gültigen Tag. in der Konfigurationsdatei, "obwohl ich eine app.config-Datei für die Baugruppe erstellt und das Beispiel von this article eingefügt.
Die Häufigkeit, wie oben erwähnt, verlangsamte meine erste Abfrage stark, und das nächste Mal, als genau die gleiche Abfrage ausgeführt wurde, wurde eine andere Auswahl an die Datenbank gesendet. Vielleicht sollte ich dieses Thema in einen anderen Beitrag "externalisieren". Ich werde das tun, wenn jemand mir sagt, dass es absolut ungewöhnlich ist, dass eine Anfrage so sehr verlangsamt wird und er weitere Details benötigt, um mir zu helfen.
Der Link zum guten Einstieg zu reduzieren arbeiten Ich denke, dass Hibernating Rhinos Dinge bewegt haben. Nach ein wenig Suche fand ich [diesen Beitrag] (http://nhibernate.hibernatingrhinos.com/28/first-and-second-level-caching-in-nhibernate), was ich denke, ist der eine, auf den hier Bezug genommen wird. –
@John: Danke für die Kündigung, habe den Link entsprechend aktualisiert. Es ist genau dieser Artikel. – chiccodoro