2009-06-22 3 views
3

Nehmen wir an, ich habe ein Objekt, das ziemlich komplex ist. Da es so komplex ist, dauert es ein wenig, um von der Datenbank zu laden. Nehmen wir an, meine Benutzer möchten ein Raster, das alle diese Objekte anzeigt, und ich weiß, wenn ich es zur Verfügung stelle, wird die Leistung nicht wünschenswert sein. Ich versuche, den besten Weg zu finden, damit umzugehen. Bisher habe ich zwei Ideen:ASP.NET - Laden von Rasterdaten mit starker OO-Struktur

Implementieren Lazy-Loading: Ich brauche wirklich nicht das gesamte Objekt, um das Raster anzuzeigen. Ich bin mir nicht sicher, ob ich diesen Weg gehen möchte, weil überall sonst das gesamte Objekt geladen werden muss und ich meine Architektur für Grids nicht drastisch ändern möchte.

Gebe ein Recordset zurück, das speziell auf mein Raster zugeschnitten ist: So lehne ich mich an. Im Grunde würde ich ein DataSet oder einfach flaches Objekt zurückgeben. Meine Stored Procedure kann die Datenrelationen ausführen, um das Recordset wie gewünscht zurückzugeben.

Gibt es noch andere Ansätze, die ich betrachten könnte? Ich habe vorher noch keine richtigen Grids gemacht und wollte sicherstellen, dass ich es beim ersten Mal richtig gemacht habe. Kann jemand irgendwelche Nachteile meiner zweiten Idee haben?

Antwort

3

Ich denke, Ihre Intuition ist richtig, dass Ihr zweiter Weg richtiger ist. Wenn Ihr vollständiges Objekt so groß ist, dass es eine erhebliche Last zum Laden ist, haben Sie recht, wenn Sie versuchen, die Gesamtlast zu minimieren, indem Sie die Größe der zurückgegebenen Daten reduzieren. Es klingt, als ob dein Objekt auch von etwas Refactoring profitieren könnte; Wenn es wirklich so groß ist, dass es so mühsam ist, es zu laden, könnte es von der Umgestaltung in kleinere Komponenten profitieren?

+0

Vielen Dank für den Hinweis! –

1

Ich würde eine helle Entität erstellen, die die Felder darstellt, die Sie in Ihrem Raster anzeigen müssen.

ABER! Ich würde das nur tun, wenn das Raster schreibgeschützt ist. Wenn Sie Objekte aus diesem Raster ändern müssen, haben Sie am Ende eine unangenehme Übersetzungsebene, die für die Leistung nicht besser sein könnte. In diesem Fall würde ich Ihre Domänenobjekte langsam laden. Es gibt andere Möglichkeiten, wie Sie eine bessere Leistung aus diesen Daten ziehen können, wie DB-Optimierungen (Indizes, Überprüfen der Fragmentierung der Indizes usw.). Überprüfen Sie einfach den Ausführungsplan, nachdem Sie die Abfrage geschrieben haben.

Sie können die Seitennummerierung auch in Ihrem Proc implementieren, wenn Sie eine große Liste dieser schweren Objekte zurückgeben, sodass Sie nur 10 oder 20 gleichzeitig erhalten und der Benutzer mehrere Seiten durchsuchen kann. Anstatt die gesamte Liste und Seite im Code zu laden, können Sie eine Spalte für die Zeilennummer hinzufügen und die Zeilennummer übergeben, die Sie als Parameter an den Prozess ziehen möchten.

+0

Vielen Dank für Ihren Rat. Ich stimme dir zu. Ich benutze Paginierung, aber die wundervollen Benutzer erwarten, dass sie 100 Datensätze abrufen können. Das Raster ist schreibgeschützt und alle Aktionen, die es ausführen kann, funktionieren mit einem Zoom-Bildschirm. Danke noch einmal! –

Verwandte Themen