2010-12-28 7 views
0

Dinge zu erreichen:Wie man asp.net Web-Anwendung verwendet, um Speicher zu manipulieren?

  • mehrere Gruppen von Benutzern interagiert Browser.

  • In jeder Gruppe interagieren Benutzer mit einigen Daten (Objekten).

  • Die Daten (Objekte) werden aus der Datenbank geladen. Während der Interaktion benötigt der Benutzer eine schnelle und synchronisierte Ansicht derselben Daten (Objekte), so dass sie im Speicher gespeichert werden müssen.
  • Daten (Objekte) werden während der Interaktion geändert, aber nur das Endergebnis dieser Interaktion muss in DB gespeichert werden.

Meine aktuelle Lösung

Belastungsdaten (Objekt) in global.asax manipulieren die. Aber für diese Lösung habe ich einige Fragen.

  • Wie kann ich sicherstellen, dass die Web-Anwendung nur eine Instanz haben (konfigurieren in iis -> Anwendungspool?)?
  • weil Web-Anwendung, die von sich selbst neu starten würde, als Ergebnis werden alle Daten in der Anwendung Staat wird verlieren. Wie kann ich vermeiden, dass die Anwendung selbst neu gestartet wird, anstatt verwaltet zu werden?
  • in der iis application pool einstellung, kann ich die recycling zeit einstellen, ist es garantiert, dass keine anwendung neu starten wird während dieser zeit passieren?
  • oder gibt es und Ereignis, das etwas auslösen kann (vor dem Neustart der Anwendung), so kann ich den aktuellen Anwendungsstatus speichern und sie wieder laden?

  • oder gibt es einfach einen anderen Weg, um das zu erreichen, was ich erreichen muss?

dank

+0

Eine offensichtliche Frage ist - warum müssen diese Objekte im Speicher sein? Ist es wirklich notwendig? Es ist unwahrscheinlich, dass es nur um Geschwindigkeit geht, da die Zeit, die benötigt wird, um Objekte in den Speicher zu laden, im Vergleich zu der Zeit, die eine Anforderung benötigt, um das Internet zu durchqueren, trivial ist. –

Antwort

0

Ich denke, man sollte etwas sein könnte einfacher auf diese Weise nicht versuchen, den IIS-Anwendungspool usw. Einfach zu betrügen sie die Tatsache sein lassen und genießen, dass die Anwendung Skalierung.

Stattdessen sollten Sie eine Art gemeinsamen Speicher auf einem separaten Server (Prozess) einrichten. Wenn Sie Memcached verwenden, um diese Datenobjekte zu speichern, sollte das im Prinzip so sein, als ob es in einer Variablen in der Webanwendung gespeichert wäre, mit der Ausnahme, dass es dort länger als die Lebensdauer der Webanwendung verbleibt.

Sie sollten wahrscheinlich nicht befürchten müssen, dass das nicht genug synchronisiert ist, es sei denn Sie eine Menge Eingabe/Ausgabe auf ein Objekt haben oder tatsächlich benötigen Echtzeit-Kommunikation oder die Ereignisse des Objekts ...

0

Es ist die Application_End-Ereignis Aber ich habe gehört, dass es nicht immer angerufen wird. Einen Versuch wert, denke ich.

Dann können Sie Setup die App Pool nach Ihren Angaben zu recyceln:

http://remy.supertext.ch/2010/08/iis7-worker-process-reached-its-allowed-processing-time-limit/

Wenn es keine Nutzung Ihrer App in der Nacht ist, dass es eine einfache Lösung.

Etwas wie Memcache ist offensichtlich professioneller. Ich denke, MS hat etwas ähnliches für IIS7.

Verwandte Themen