HttpCache vs Singleton - Best Practice für eine MVC-Anwendung

8

Ich bin etwas verwirrt, wenn ich die HttpCache- und Singleton-Ansätze verstehe.

Meine Anwendung verwendet Asp.net MVC und das Szenario ist das, ich habe eine Liste von Daten, die sich nie ändern werden und einige Daten, die sich selten ändern.

Ich habe eine Anwendung entwickelt und implementiert, die ein Singleton-Repository für diese Art von Daten verwendet. Es ist großartig. Das einzige Problem ist, dass, wenn ein seltener Fall auftritt, ich IIS neu starten muss, um zu wirken.

Was ist die beste Lösung?

Singleton-Implementierung

%Vor%

}

    
Dipal Mehta 21.12.2012, 12:55
quelle

2 Antworten

8

Der Zweck der Verwendung des Singleton-Musters ist im Allgemeinen nicht für die statische Datenspeicherung. Sie sollten ein Singleton verwenden, wenn nur eine Objektinstanz bestimmte Aktionen ausführen kann. Es kann schnell gehen, aber wie Sie sehen können, müssen Sie, wenn sich die Daten ändern, den Heap zurücksetzen, um die neuen Daten zu erhalten (wie Sie sagen, indem Sie IIS neu starten).

HttpCache (genauer gesagt, der ObjectCache, den das Http-Caching standardmäßig verwendet), speichert die Daten an der gleichen Stelle wie der Heap: im Direktzugriffsspeicher. Es ist also genauso schnell wie statische Daten, die in einer Klasse oder Instanz auf dem Heap gespeichert sind. Der Unterschied besteht darin, dass Sie den Cache so einrichten können, dass er regelmäßig veraltet, so dass er neue Daten erhält, wenn sich die Daten ändern. Sie können SqlCacheDependencies sogar so einrichten, dass der Cache bei jedem Statuswechsel der Datenbank veraltet wird.

Ein weiterer Vorteil des Caches ist, dass es die RAM-Ressourcen Ihres Servers effizienter nutzt. Mit Ihrem Singleton, egal was, werden diese Daten immer Speicher belegen, auch wenn die Daten nicht verwendet werden. Mit dem Cache speichert der Server die Daten nur dann im Arbeitsspeicher, wenn sie verwendet werden. Die Nachteile beim Cache sind, dass gelegentlich ein Benutzer hier und dort eine langsamere Antwort erhält, wenn er Daten anfordert, nachdem der Cache abgelaufen ist. Nachdem dies jedoch der Fall ist, profitieren andere Benutzer von den Daten, die zeitweise zwischengespeichert werden.

    
danludwig 21.12.2012, 13:16
quelle
3

Sie können den Singleton tatsächlich neu laden, indem Sie eine Reload-Methode wie diese erstellen:

%Vor%

Ich hoffe, das hilft.

    
Munk 21.12.2012 22:13
quelle