Wie kann ich eine generische Liste von einem DataTable mit dem niedrigsten Overhead erhalten?

StackOverflow https://stackoverflow.com/questions/1701539

  •  19-09-2019
  •  | 
  •  

Frage

Ich suche hier nach Best Practices. Es tut uns leid. Ich weiß, dass es subjektiv ist, aber es gibt hier viele kluge Leute, also sollte es einige "sehr gute" Möglichkeiten geben, dies zu tun.

Ich habe ein benutzerdefiniertes Objekt namens Mitarbeiter. Dieses Objekt enthält sieben Eigenschaften wie Name, Telefon, E -Mail usw. Es gibt auch eine Tabelle in meiner SQL -Datenbank mit dem Namen TBLETPOTORE mit sieben Spalten, die etwas ähnlich gekennzeichnet sind. Mein Ziel ist es, die Ergebnisse einer Abfrage in eine generische Liste von Mitarbeiterobjekten zu "konvertieren". Was ist der beste Weg, dies zu tun (niedrigster Overhead, schnellste)?

Was ich derzeit mache, ist etwas, das ich im gesamten Web vorgeschlagen habe. Ich mag es nicht, weil ich das Gefühl habe, dass es meine Seite verlangsamt. Generische Listen machen mich schneller bei dem, was ich tue, aber ich fühle mich nicht gut, wenn meine Kunden den Preis zahlen.

Hier ist, was ich tue:

List<Employee> list = new List<Employee>();
DataSet ds = Employee.searchEmployees("Byron");
foreach (DataRow dr in ds.Tables[0].Rows)
{
   list.Add(new Employee(dr));
}

Ich habe einen Konstruktor, der einen Datarow (wie gezeigt) nimmt, der das Zeug 'Eigenschaft = dr ["Spalte"] verwaltet.

Ich freue mich auf deine Gedanken.

War es hilfreich?

Lösung

Wenn ich kurz den Code betrachte und nicht sehe, wie er verwendet wird, würde ich einen Ienumerator anstelle einer Liste zurückgeben. Sie können dann die Rendite -Return -Anweisung verwenden und werden die Liste nicht zweimal durchlaufen (eine zum Ausfüllen und eine zum Anzeigen).

Also...

protected IEnumerable<Employee> GetEmployees ()
{
   List<Employee> list = new List<Employee>();
   DataSet ds = Employee.searchEmployees("Byron");

   foreach (DataRow dr in ds.Tables[0].Rows)
   {
       yield return new Employee(dr);
   }
}

Andere Tipps

Welcher Teil des Prozesses ist Ihrer Meinung nach langsam? Ihre Methodik hat nicht so weit wie ich sehen kann.

Ich würde vorschlagen, einen oder Mapper wie Linq2SQL oder Entity Framework zu verwenden

Der Grund für das Erstellen einer Liste besteht darin, zwischen Funktionen auf der Serverseite zu bestehen.

Was ist der Vorteil, die Liste zu übergeben, anstatt eine Datensatzreferenz oder sogar eine DataTable zu übergeben?

Abgesehen von diesen Gedanken, die Sie derzeit tun, ist das Standardverfahren zum Erstellen einer Liste. Wie denkst du, könntest du es beschleunigen? Durch Nicht -Instanz des Mitarbeiterobjekts? Sie müssten dann ohne das Mitarbeiterobjekt verzichten, das sich wahrscheinlich mit Ihrer Entitätsmodellierung anlegen würde.

Was Sie jetzt tun, ist etwas, das irgendwann die eine oder andere Weise getan werden muss, und Sie können es nicht wirklich wesentlich schneller tun als die Art und Weise, wie Sie es beschrieben haben. Sie können jedoch die Häufigkeit reduzieren, mit der Sie dies überhaupt tun müssen, indem Sie Ihre Daten zwischengespeichern.

Speichern Sie die Liste der Kunden im Cache. Füllen Sie es beispielsweise bei Anwendungsstart. Wenn etwas ein Kundendatensatz ändert, aktualisieren Sie den Cache und speichern den Datensatz in der Datenbank. Alle Lesevorgänge eines Benutzers gehen zum Cache, nicht in die Datenbank.

Dieser Ansatz ist in der Regel schneller als jeder Ansatz, der die Datenbank trifft.

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