Frage

Was vorzuziehen ist, einen Datensatz in der Sitzung zu halten oder auf jedes Postbacks den Datensatz füllen?

War es hilfreich?

Lösung

Das würde von vielen Faktoren abhängen. Es ist in der Regel am besten nicht zu viele Elemente in Sitzungsspeicher zu halten, wenn Ihre Sitzung inproc oder auf einem State-Server ist, weil es weniger skalierbar ist.

Wenn Sie Ihre Sitzung auf der Datenbank befindet, könnte es besser sein, nur requery und besiedeln den Datensatz, wenn die Abfrage kostspielig auszuführen.

Andere Tipps

Sie nicht die Sitzung verwenden !!! Wenn der Benutzer eine zweite Registerkarte mit einer anderen Anforderung öffnet wird die Sitzung wieder verwendet werden und die Ergebnisse werden nicht diejenigen sein, die er / sie erwartet. Sie können eine Kombination von Viewstate und Session verwenden, aber immer noch messen, wie viel Sie ohne jede Art von Caching umgehen können, bevor Sie zum Caching zurückgreifen.

Es hängt davon ab, wie stark werden Sie tun, dass und wo Sie Ihre Sitzungsdaten auf dem Server gespeichert ist.

die Datensätze in der Sitzung zu halten wirkt sicherlich Speichernutzung . Alle der Session-Variablen sind im Speicher oder in SQL Server gespeichert, wenn Sie SQL Server Zustand verwenden. Sie können auch die Last auf eine andere Maschine mit dem Staat-Server-Modus abzuladen.

Die Serialisierung / Deserialisierung Aspekt. Wenn Sie irrsinnig großen Datensätze verwenden könnte es schlecht Server Seide Leistung beeinflussen.

Auf der anderen Seite, die sehr großes viewstates auf den Seiten kann ein echten Performance-Killer . So würde ich Datensätze hält in der Sitzung oder im Cache und suchen Sie nach einer „Outproc“ Art und Weise, dass die Sitzungsdaten zu speichern.

Da ich so wenige Datenbankoperationen wie möglich will, werde ich die Daten in der Sitzung halten, aber ich bin nicht sicher, was der beste Weg, es zu tun wäre. Wie gehe ich mit Parallelität und auch da die Daten gemeinsam genutzt wird, wenn zwei Benutzer gleichzeitig die Seite nutzen, wie kann ich sicherstellen, jede von ihnen ihre eigenen Reihe von Daten, die in der Sitzung hat?

ich es in der Regel in der Sitzung halten, wenn sie nicht zu groß und / oder der db ist weit und langsam. Wenn die Daten groß sind, in der Regel ist es besser, neu zu laden.

Manchmal verwende ich den Cache, lade ich von Db zum ersten Mal und es in der Cache gestellt. Während Postbacks prüfe ich die chache und wenn es leer ist, ich neu laden. So dass der Server verwaltet den Cache von selbst aus.

Das Problem mit der Sitzung ist, dass, wenn es in proc ist es könnte verschwinden, was nicht so toll ist, wenn es State-Server ist, dann müssen Sie serialisiert werden und wenn es SQL sate ist your're sowieso eine Rundfahrt zu tun!

wenn die Ergebnismenge groß ist, tut benutzerdefinierten Paging, so dass Sie nur eine kleine Teilmenge der Gesamtergebnisse zurück.

dann, wenn Sie denken, mehr als ein Benutzer diese Ergebnismenge jede Seite im Cache gestellt sehen, wie die User-Seiten darauf achten, dass der Cache erneuert wird, wenn sich die Daten ändern oder nach einer Weile davon nicht zugegriffen wird.

Wenn Sie nicht wollen, viele Rundreisen machen, und Sie denken, dass Sie den Speicher haben dann Spund den gesamten Datensatz in dem Cache aber vorsichtig sein, es nicht auf den Webserver nicht schmilzt.

mit der Cache bedeutet, dass Benutzer nicht ihren eigenen Satz von Daten müssen vielmehr verwenden sie den globalen Satz.

so weit wie Gleichzeitigkeit geht, wenn Sie die Insert / Edit-Seite Sie es mit frischen Daten auffüllen müssen laden und den Cache nach dem Add / Update zu erneuern.

Ich bin ein großer Anhänger der Entkopplung und ich selten, wenn überhaupt, sehen die Notwendigkeit, einen vollständigen Datensatz aus der Benutzerschnittstelle zu werfen.

Sie sollten wirklich nur Objekte auf der Benutzeroberfläche übergeben, die so verwendet werden muss, es sei denn, Sie ein großes Diagramm oder irgendeine Art von Datenstruktur sind zeigt, die Beziehungen zwischen Daten angezeigt werden muss, ist es nicht die Kosten wert.

Kleinere Teilmengen von Daten, wenn anwendbar, ist wesentlich effizienter. Ist Ihre Anwendung innerhalb eines Datensatzes auf der Benutzeroberfläche mit allen Funktionen tatsächlich? wenn nicht, dann der beste Weg wäre, um fortzufahren, um nur die Daten passieren, dass Sie die Anzeige.

Wenn Sie Bindungsdaten an einem Steuer- und Sortieranlagen / Paging usw. durch sie, können Sie eine Menge der Schnittstellen implementieren, die die Datenmenge ermöglicht, dies zu unterstützen, in vielen kleineren Stück Code.

In diesem Sinne, ich Daten halten würde, die weitgehend statisch ist (zum Beispiel ist es nicht so oft aktualisiert werden) im Cache. Sie müssen also prüfen, wie oft die Daten aktualisiert werden, bevor Sie wirklich eine Entscheidung für diese machen kann.

Schließlich, ich werde das noch einmal sagen, ich sehe die Notwendigkeit einen Datensatz in der Benutzeroberfläche zu verwenden, sehr, sehr rarely..it sind ein sehr schweres Datenobjekt und die Kostenvorteile von zu Ihren Datenanforderungen suchen, im Vergleich zu einfacher Implementierung , weit könnte die Notwendigkeit schwerer wiegen als einen Datensatz cachen.

IMHO, Datensätze sind eher schlecht zu verwenden, wenn Sie über die Leistung oder Speicherauslastung besorgt sind.

Ihre Antwort deutet nicht auf der Verwendung der Daten. Ist es Daten verweisen? Ist der Benutzer aktualisieren aktiv? Ist mehr als ein Benutzer gemeint Aktualisierungszugriff zu jeder Zeit?

Ohne bessere Informationen als Sie zur Verfügung gestellt, mit der akzeptierten Weisheit gehen, die großen Mengen von Daten in der Sitzung sagt zu halten, ist ein Weg, um sicherzustellen, dass Ihre Bewerbung nicht Skala und saftige Ressourcen erfordern zu dienen eine Handvoll Leute.

Es gibt in der Regel bessere Möglichkeiten, große Datenmengen zu verwalten, ohne sich im Speicher zurückgreifen, alle Daten zu laden.

Gelingt das nicht, wenn Ihre Anwendungsdaten Bedürfnisse wirklich monsterous sind, dann einen schweren Client mit einer Back-End-Web-Service in Betracht ziehen. Es kann sein, besser geeignet als eine Web-Seite zu machen.

Wie andere Antworten festgestellt haben, „hängt“ die Antwort. Allerdings werde ich davon ausgehen, dass Sie Daten sprechen, die zwischen Benutzern gemeinsam genutzt wird. In diesem Fall sollten Sie nicht Speichern des Datensatzes in der Sitzung des Benutzers, sondern repopulate auf Postbacks.

Darüber hinaus sollten Sie einen Cache in der Nähe der Datenzugriffsschicht Ihrer Anwendung füllen interaktive Performance zu erhöhen und verringern Last auf der Datenbank. Das Design Ihres Cache wieder wird von der Art der Daten ab (schreibgeschützt gegen Lese- / Schreib vs. schreib meistens).

Dieser Ansatz entkoppelt die Benutzersitzung (ein UI-Layer-Konzept) von Datenmanagement und bietet den zusätzlichen Vorteil der Unterstützung zum gemeinsamen Nutzung von Daten im Cache (in Fällen, in denen Daten gemeinsam über Benutzer sind).

Weder - dont "halten" alles! Zeigen Sie nur, was ein Benutzer sehen muss und baut ein effizientes Paging-Schema zu sehen Zeilen rückwärts oder fowards.

rp

Halten Sie in der Sitzung. Haben Option neu zu besiedeln, wenn Sie benötigen, zum Beispiel, wenn die Sitzung Speicher gelöscht wird.

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