Frage

Ich bin mit einem Web-Dienst, der eine Liste von Produkten zurückgibt. Ich habe eine Grid-Ansicht programmatisch und verwendet, um die Liste als Datenquelle. Allerdings kann ich verwenden, um das Paging nicht / Sortierverfahren, da es Fehler verursacht, da ich keine ObjectSource Steuerung. Ich behandeln das Paging und Sortieren von Hand, aber ich weiß nicht, ob ich es effizienter mache. Wenn der Benutzer auf einer neuen Seite klickt, ich behandeln die Seite Index wie folgt zu ändern:

protected void gvProductList_PageIndexChanging(object sender, GridViewPageEventArgs e)
{

    userProducts = Data.GetProductList();

    this.gvProductList.PageIndex = e.NewPageIndex;
    this.gvProductList.DataSource = userProducts;
    gvProductList.DataBind();
}

Allerdings ist die Datenbank immer dann aufgerufen, wenn ich Seiten ändern. Gibt es eine Möglichkeit, diese effizienter zu machen, oder ist das normal für Paging? Das gleiche gilt für die Sortierung, die den Web-Service verwendet die Produkte zu erhalten, dann wird ein Lambda-Ausdruck die Produkte nach verschiedenen Spalten zu sortieren. Jedes Mal, dies geschieht, wird die Datenbank (um die Liste der Produkte wieder zu bekommen) genannt. Bin ich die Handhabung dieses falsch? Ich weiß, dass ich Sitzungen verwenden kann, und solche, die Liste zu speichern, aber es kann zu jeder Zeit Hunderte von benutzerdefinierten Objekten pro Liste und Zehntausende von Benutzern sein.

sollte ich beachten Sie, dass der Webdienst von einem Dritten zur Verfügung gestellt wird (und so ist es ihre Datenbank genannt wird), was bedeutet, dass ich selbst keinen Zugriff auf die SQL Server haben noch alle Methoden, die Web-Service zu ändern.

Vielen Dank für jede Hilfe.

EDIT: Ich sollte erwähnen, dass die Produktliste der Warenkorb des Benutzers ist. Daher ist es einzigartig pro Benutzer.

Allgemeiner Konsens: Wenn der Warenkorb ist nicht viele Elemente zu halten, würde die aktuelle Methode in Ordnung sein. wenn Caching erforderlich ist jedoch, kann dies erreicht werden durch entweder unter Verwendung von In Proc Sitzungen oder Sitzungen auf einem SQL Server zu speichern.

War es hilfreich?

Lösung

Nein, es ist nicht effizient, da Sie jeden Datensatz in der zugrunde liegenden Datenbank (vorausgesetzt GetProductList () liefert alle Datensätze) bringen zurück. Der Gridview-Paging bedeutet nur, sie nur die Anzahl der Zeilen in Seitengröße für den gegebenen Pageindex definiert zeigt -. Aber es hat keine Auswirkungen, wie viele Datensätze tatsächlich von der Datenquelle zurückgegeben

Leider, da Sie keinen direkten Zugriff auf die Datenbank und den Web-Service bietet keine andere Methoden verfügen, dann ist die besten Sie können sich wahrscheinlich tun ist Cache die Daten . Zum Glück asp.net macht Cachen von Daten ganz einfach . Das Cache-Objekt ist eher wie Session, außer dass Sie nur eine Instanz pro Anwendung, nicht pro Benutzer.

Andere Tipps

Es sieht aus wie Sie alle Produkte aus dem Web-Service sind zu holen, dann tun die Sortierung und Paging innerhalb Ihrer Webseite ein. Dies bedeutet, dass Sie ziehen mehr Daten aus dem Web-Service zurück, als Sie zu jeder Zeit benötigen. Hat der Web-Service die Anlage liefert Argumente zu übergeben die gewünschte Seite, Seitengröße und Sortierreihenfolge darstellen? Wenn nicht, sollten Sie vielleicht die Möglichkeit erörtern, das Hinzufügen dieser Funktionen mit den Dritten, der den Dienst zur Verfügung stellen.

Wenn dies nicht möglich ist, wie oft wird die Produktliste aktualisiert? Wenn es relativ selten aktualisiert wird, können Sie den ASP.NET-Cache verwenden, um die Ergebnisse des Web-Service-Aufrufs lokal zu speichern. Die Cache-Datenquelle könnte eingestellt werden, auf ablaufen, sagen, Stundenbasis. Auf diese Weise können Benutzer die Seite angezeigt wird eine einigermaßen up-to-date Liste der Produkte sehen.

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