Frage

Für eine .NET-Komponente, die sowohl in Webanwendungen als auch in Rich-Client-Anwendungen verwendet wird, scheint es zwei offensichtliche Optionen für das Caching zu geben:System.Web.Caching oder die Ent.Lib.Caching-Block.

  • Was benutzt du?
  • Warum?

System.Web.Caching

Ist die Verwendung außerhalb von Web-Apps sicher?Ich habe gemischte Informationen gesehen, aber ich denke, die Antwort lautet vielleicht, irgendwie nicht wirklich.

Ich erwarte nicht, eines seiner Highlights zu nutzen, SqlCacheDependency, aber der Zusatz von CacheItemUpdateCallback in .NET 3.5 scheint eine wirklich gute Sache zu sein.

Anwendungsblock für die Zwischenspeicherung der Unternehmensbibliothek

  • Andere Blöcke werden bereits verwendet, sodass die Abhängigkeit bereits besteht
  • Cache-Persistenz ist nicht erforderlich;Die Neugenerierung des Caches beim Neustart ist in Ordnung

Einige Cache-Elemente sollten immer verfügbar sein, aber regelmäßig aktualisiert werden.Für diese Artikel erhalten Sie einen Rückruf nach Das Entfernen eines Elements ist nicht sehr praktisch.Es sieht so aus, als müsste ein Client einfach schlafen und abfragen, bis das Cache-Element neu gefüllt ist.

Im Speicher für Win32 gespeichert + .NET-Client

Was sind die Vor- und Nachteile, wenn Sie keine benötigen? verteilt Zwischenspeicher?

War es hilfreich?

Lösung

Dies sind die Punkte, die ich zum Thema Caching berücksichtige:

Memcached Win32 Velocity .NET Cache Enterprise Library Caching -Anwendungsblock

MemCached Win32: Bis vor kurzem habe ich MemCached Win32 verwendet.Dies ähnelt einer Webfarm (viele Server stellen denselben Inhalt für eine hohe Verfügbarkeit bereit), es handelt sich jedoch um eine Cache-Farm.Das bedeutet, dass Sie es zunächst lokal auf Ihrem Webserver installieren können, wenn Sie nicht über die Ressourcen für eine größere Erweiterung verfügen.Im weiteren Verlauf können Sie dann horizontal (mehr Server) oder vertikal (mehr Hardware) skalieren.Dies ist ein Produkt, das vom ursprünglichen MemCached für die Verwendung unter Windows portiert wurde.Dieses Produkt wurde häufig auf sehr stark frequentierten Websites eingesetzt. http://lineofthought.com/tools/memcached

Geschwindigkeit: Dies ist Microsofts Antwort auf Produkte wie MemCached.MemCached ist schon seit einiger Zeit draußen, Velocity befindet sich im CTP-Modus.Ich muss sagen, dass dieses Produkt nach dem, was ich bisher gelesen habe, mir sicherlich den Kopf verdrehen wird, sobald es auf dem Markt ist.Aber ich kann mich nicht dazu durchringen, große Produktionsprojekte mit einem CTP-Produkt ohne Erfolgsbilanz durchzuführen.Ich habe jedoch angefangen, damit zu spielen, denn sobald es an Fahrt gewinnt, ist MemCached nicht einmal mit denen vergleichbar, die in der Windows-Welt gefangen sind! http://blogs.msdn.com/velocity/

.NET-Cache: Es gibt keinen Grund, den standardmäßigen .NET-Cache zu vernachlässigen.Es ist integriert und kann kostenlos verwendet werden, ohne dass eine (große) Einrichtung erforderlich ist.Es bietet Flexibilität, indem es Mechanismen zum Speichern von Elementen im lokalen Speicher, auf einem EINZELNEN Statusserver oder in einer zentralen Datenbank bietet.Velocity kommt dann ins Spiel, wenn Sie mehr als einen einzelnen Statusserver (Cache im Arbeitsspeicher) benötigen und keine langsame Datenbank zum Speichern Ihres Caches verwenden möchten.

Unternehmensanwendungsblock: Ich halte mich von allen Enterprise Application Blocks fern.Es sind schwere Frameworks, die mehr bieten, als ich normalerweise benötige!Solange Sie daran denken, alles zu verpacken, was mit Code in Berührung kommt, der nicht Ihr eigener ist, und einfache Regeln für die Codierung befolgen, bleiben Sie bei einer der anderen Methoden und nicht bei dieser!(Natürlich nur meine Meinung – MySpace nutzt die Enterprise Application Blocks so weit wie möglich aus!)

Sie müssen sich nicht im Voraus entscheiden! Im Allgemeinen erstelle ich einen Cache-Wrapper, mit dem ich in meinem Code für Methoden wie Get, Set, Exists, Remove, ListKeys usw. kommuniziere.Dies verweist dann auf eine zugrunde liegende Ebene der Cache-Abstraktion, die auf MemCached, Velocity oder .NET-Cache verweisen kann.Ich verwende StructureMap (oder wähle einen anderen IoC-Container), um die Art von Cache einzufügen, die ich für eine bestimmte Umgebung verwenden möchte.In meiner lokalen Entwicklungsbox verwende ich möglicherweise den .NET-Cache in der Sitzung.In der Produktion verwende ich im Allgemeinen MemCached Win 32.Unabhängig davon, wie es eingerichtet ist, können Sie die einzelnen Systeme problemlos austauschen und ausprobieren, um herauszufinden, was für Sie am besten funktioniert.Sie müssen nur sicherstellen, dass Ihre Anwendung so wenig wie möglich darüber weiß, wie Dinge zwischengespeichert werden!Sobald diese Abstraktionsebene eingerichtet ist, können Sie beispielsweise einen Komprimierungsalgorithmus (gzip) für alle Daten ausführen, die in den Cache ein- und aus diesem herausgehen, wodurch Sie die zehnfache Datenmenge im Cache speichern können.- transparent.

Ich behandle .NET Cache, MemCached Win32, StructureMap und die entsprechenden Abstraktionen in meinem Buch, falls Sie interessiert sind!

ASP.NET 3.5 Soziale Netzwerke (http://www.amazon.com/ASP-NET-3-5-Social-Networking-Enterprise-ready/dp/1847194788/ref=sr_1_1?ie=UTF8&s=books&qid=1225408005&sr=8-1 ) Andrew Siemer www.andrewsiemer.com blog.andrewsiemer.com www.socialnetworkingin.net

AktualisierenDer Link, der Websites auflistet, die Memcached verwenden, wurde geändert.Vielen Dank, David, dass du bemerkt hast, dass es kaputt war!

Andere Tipps

Beachten Sie, dass Sie in der EntLib-Dokumentation speziell auf den ASP.NET-Cache für ASP.NET-Anwendungen hingewiesen werden.Das ist wahrscheinlich die stärkste Empfehlung, es hier zu verwenden.Außerdem weist der EntLib-Cache keine Abhängigkeiten auf, was für mich ein wichtiger Grund ist, ihn nicht zu verwenden.

Ich glaube nicht, dass es eine technische Einschränkung als solche bei der Bereitstellung von System.Web als Teil Ihrer App gibt, obwohl es etwas seltsam ist, dass sie diesen Hinweis auf der .NET 3.5-Seite eingefügt haben.Hanselman sagt tatsächlich, dass ihm diese Vorstellung zunächst Angst machte, er dann aber überzeugt wurde.Auch wenn man die Kommentare liest, sagt er, dass der Block zu viele bewegliche Teile hat und der ASP.NET-Cache viel leichter ist.
Ich denke, das ist genau die Art von Problem Geschwindigkeit wird sich lösen, aber das ist vorerst nur eine Vorschau :-(

Ich würde sagen, verwenden Sie Web.Caching und sehen Sie, wie es Ihnen geht.Wenn Sie eine Art Abstraktionsschicht darüber legen, haben Sie jederzeit die Möglichkeit, diese später bei Problemen durch den EntLib-Block auszutauschen.

Schauen Sie mal rein zwischengespeichert.Es ist ein wirklich cooles, schnelles und leichtes verteiltes Caching-System.Es gibt APIs für mehrere der beliebtesten Sprachen, einschließlich C#.Auf der Clientseite funktioniert es möglicherweise nicht gut (es sei denn, der Client bezieht die zwischengespeicherten Daten natürlich von einem Server), aber wenn Sie Ihre Verwendung von Memcached auf eine bestimmte Schnittstelle abstrahieren, können Sie die Schnittstelle dann mit einem anderen Caching implementieren System.

@Davide Vosti

"Wenn sie es in den Webnamespace aufnehmen, denke ich, dass es aus gutem Grund ist." Gilt dieselbe Logik für die Runtime (Parallelitäts- und Koordinationslaufzeit (CCR) im Roboterstudio?NEIN?Dachte nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top