Ich habe eine Situation, in der ich Daten von einer Abfrage abrufen muss, die fast eine halbe Minute ausführt und es auf eine Webseite bringt. (Es gibt keine Möglichkeit, diese Zeit zu reduzieren, da die maximale Menge an Optimierung darauf ausgeführt wurde) Ich verwende eine vierschichtige Architektur zusammen mit Entity Framework (EF, Datenzugriffsschicht, Biz Logic Layer, UI) für meine Anwendung. Ich versuche, die Singleton-Methode zu verwenden, wenn eine Instanz an die DAL erstellt wird (die DAL wiederum Daten aus der Datenbank abruft), so dass ich in der Lage sein werde, diese Instanz erneut zu verwenden, und zusätzliche Instanzen nicht erstellt werden in derselben Sitzung. Wie kann ich den Sitzungsstatus festlegen und die Verfügbarkeit der Instanz im Statusserver prüfen?Sitzungsstatusvariablen und Singleton-Klasse
public static Singleton getInstance() {
if (**instance == null**)
instance = new Singleton();
return instance;
}
Was sollte innerhalb des if
Blocks liegen? Welchen Zustand sollte ich im Block if
überprüfen? Ich bin mir nicht sicher, was ich tun soll.
PS: Diese Sitzung muss eine Zeitüberschreitung von 5 Minuten haben. Ich höre das kann in der Web.config Datei angegeben werden. ist es wahr?
Sitzung ist eine Name Wert Sammlung. Rufen Sie die Instanz Ihres DALs mit dem Namen ab und überprüfen Sie, ob der Wert null ist. Wenn es nicht null ist, dann wirf es in eine Instanz deiner DAL. Für das, was es wert ist, würde ich diesem Muster nicht folgen. Was ist so teuer an der Erstellung Ihrer DAL, dass Sie nicht für jede Anfrage eine Instanz erstellen und entsorgen möchten? – Maess
Jedes Mal, wenn ein Objekt der DAL erstellt wird, greift es auf die DB und somit auf die gespeicherte Prozedur zu, die die komplexe Abfrage enthält, und es dauert eine weitere Minute, bis die Daten ausgegeben werden. Ich denke daran, die Instanz zu speichern und sie zum zweiten Mal für einen schnelleren Zugriff zu verwenden. – krishgopinath
Erstellen Sie für jede Benutzersitzung eine separate DAL? Warum sollte die DAL überhaupt sitzungsspezifisch sein? Kannst du nicht einfach eine Fabrik für die DAL mit einer statischen Eigenschaft darauf haben? Wenn die Eigenschaft aufgerufen wird, prüfen Sie, ob das statische Element der Factory der DAL-Instanz "null" ist.Wenn ja, instanziieren und zurückgeben. Wenn nicht, einfach zurück. – David