3 Stimmen

ASP.NET - Laden von Gitterdaten mit schwerer OO-Struktur

Nehmen wir an, ich habe ein Objekt, das ziemlich komplex ist. Da es so komplex ist, dauert es ein wenig, es aus der Datenbank zu laden. Nehmen wir nun an, meine Benutzer möchten ein Raster, das alle diese Objekte anzeigt, und ich weiß, dass die Leistung nicht wünschenswert ist, wenn ich es bereitstelle. Ich versuche herauszufinden, wie ich das am besten handhaben kann. Bis jetzt habe ich zwei Ideen:

Implementierung von 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 Raster nicht drastisch ändern möchte.

Rückgabe eines speziell für mein Grid zugeschnittenen Recordsets: Dies ist der Weg, zu dem ich neige. Im Grunde würde ich ein DataSet oder einfach ein flaches Objekt zurückgeben. Meine Stored Procedure kann die Datenbeziehungen durchführen, um den Datensatz wie gewünscht zurückzugeben.

Gibt es noch andere Ansätze, die ich in Betracht ziehen sollte? Ich habe noch nie ein richtiges Raster gemacht und wollte sichergehen, dass ich es beim ersten Mal richtig mache. Kann mir jemand irgendwelche Nachteile meiner zweiten Idee nennen?

3voto

Paul Sonier Punkte 37609

Ich denke, Ihre Intuition ist richtig, dass Ihr zweiter Weg richtiger ist. Wenn Ihr komplettes Objekt so groß ist, dass es eine erhebliche Last ist, es zu laden, haben Sie Recht, wenn Sie versuchen, die Gesamtlast zu minimieren, indem Sie die Größe der zurückgegebenen Daten reduzieren. Wenn es wirklich so groß ist, dass das Laden so viel Mühe macht, könnte es von einer Umstrukturierung in kleinere Komponenten profitieren?

1voto

Andy_Vulhop Punkte 4550

Ich würde eine leichte Entität erstellen, die die Felder darstellt, die Sie in Ihrem Gitter 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, erhalten Sie eine umständliche Übersetzungsschicht, die die Leistung nicht verbessern könnte. In diesem Fall würde ich die Domänenobjekte nur langsam laden. Es gibt noch andere Möglichkeiten, die Leistung dieses Datenzugriffs zu verbessern, z. B. DB-Optimierungen (Indizes, Überprüfung der Fragmentierung der Indizes usw.). Überprüfen Sie einfach den Ausführungsplan, nachdem Sie die Abfrage geschrieben haben).

Sie könnten auch eine Paginierung in Ihrer Prozedur implementieren, wenn Sie eine große Liste dieser schweren Objekte zurückgeben, so dass Sie nur 10 oder 20 auf einmal erhalten und der Benutzer mehrere Seiten zum Durchblättern hat. Anstatt die gesamte Liste und die Seite in den Code zu laden, könnten Sie eine Spalte für die Zeilennummer hinzufügen und den Anfang und das Ende der Zeile, die Sie abrufen möchten, als Parameter an die Proc übergeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X