Laden...

größere datenmengen innerhalb einer Seite vorhalten

Letzter Beitrag vor 18 Jahren 7 Posts 1.602 Views
größere datenmengen innerhalb einer Seite vorhalten

hallo,

ich habe eine ASP.net (2.0) Seite und lege dort im Page_Load ein List mit selbstdefinierten Objekten an.
Insgesamt sind relativ viele daten in diesem Array gespeichert.
Diese daten zeige ich auch auf der ASP.Net seite (zumindest teilweise) an.

Jetzt möchte ich nach einem Postback weiterhin diese daten zur Verfügung haben. Wie kann ich das hinbekommen? (Ich kann leider nicht jedesmal das Array neu aufbauen, da dies viel zu viel Zeit beanspruchen würde).

(Alles als Sessionvariable in eine Session packen? Oder was wäre sonst geeignet?)

Gruß
Tosek

There are 10 diffent types of people in this world: Those who understand binary and those who don't....

Also prinzipiell ist es sinnvoll, immer nur so viele Daten zu holen bzw. vorzuhalten, wie du auch darstellst, alles andere macht wenig Sinn. Und das dürfte nicht so lange dauern, als das der User die paar Millisekunden nicht warten kann.

Erste Frage: wo holst du die Daten her? Wie viel zeigst du an? Wie zeigst du sie an?

.

Also:

ich habe einen Dienst geschrieben, der Daten als Ergebnis einer Suche aus unterschiedlichsten Quellen holen kann (quasi als Art Information-Crawler). Diese Quellen können Filesysteme, Archivsysteme ERP Systeme (SAP R/3) etc. sein. Das Ganze wird in einer einzigen Ergebnisliste zusammengeführt und per GridView angezeigt.

Wenn nun der GridView paged, will der Gridview natürlich auf weitere daten aus der gebundenen Quelle zugreifen, die aber im Postback einfach nicht mehr da ist.

Wenn ich die Abfrage bei jedem Postback neu starte, dann habe ich 2 Probleme:

  1. Zum einen erzeugt das tierisch Last im gesammten Netzwerk (und die Liste war ja schon einmal vollständig da). Ich brauch Sie auch ganz, da der Anwender sortieren können soll.

  2. Die Liste gann sich in der zwischenzeit geändert haben (neue Einträge können hinzugekommen sein). Ich will aber nur den Stand des Abfragezeitpunkts darstellen.

There are 10 diffent types of people in this world: Those who understand binary and those who don't....

Da bin ich mir selbst nicht wirklich sicher, was der beste Weg ist - das müsste man durchprobieren.

Was mir einfällt:

a) Viewstate
b) Session
c) Datenbank

Ich würde fast letzteres bevorzugen.

.

Hallo,

Viewstate wäre wahrscheinlich nicht sehr gut geeignet.
Entweder Session oder DB.

DB als Zwischenspeicher wäre denkbar. Dann müsste ich in einer Tabelle alle Werte zusammen mit der Session-ID(????) speichern und dann immer darauf zugreifen, oder?

Aber ich müsste ja zu irgendeinem Zeitpunkt die Datenbank wieder leerräumen. (Sonst läuft Sie irgendwann voll) Welche Stelle würde sich da anbieten?

There are 10 diffent types of people in this world: Those who understand binary and those who don't....

Hallo Tosek,

du könntest auch den Cache verwenden:
http://aspnet.4guysfromrolla.com/articles/100902-1.aspx

Original von Tosek
Hallo,

Viewstate wäre wahrscheinlich nicht sehr gut geeignet.
Entweder Session oder DB.

DB als Zwischenspeicher wäre denkbar. Dann müsste ich in einer Tabelle alle Werte zusammen mit der Session-ID(????) speichern und dann immer darauf zugreifen, oder?

Aber ich müsste ja zu irgendeinem Zeitpunkt die Datenbank wieder leerräumen. (Sonst läuft Sie irgendwann voll) Welche Stelle würde sich da anbieten?

Ich würde das nicht benutzer- sondern abfragebezogen speichern, d.h. als Key die Such-Expression. Leer räumen kannst du das z.B. alle paar Tage durch ein simples Script, was du per Scheduler anstößt.

Der von Kai vorgeschlagene Cache ist eine Alternative, bietet sich imho aber aufgrund der hohen Datenmengen nicht unbedingt an.

Edit: evtl. kannst du das Aufräumen intelligenter gestalten, in dem du häufige Suchanfragen rausfilterst und deren Ergebnisse nicht löchst oder gar automatisiert im Voraus, z.B. nachts, aktualisierst - d.h. für diese Suchen automatisiert suchst, bevor der Benutzer überhaupt tätig wird.