Frage

Ich bin ein erfahrener Programmierer in einem Legacy (noch objektorientiertes) Entwicklungs-Tool und damit den Wechsel zu C # /. Net. Ich schreibe eine kleine Single-User-App mithilfe von SQL Server CE 3.5. Ich habe die konzeptionelle DataSet lesen und verwandte doc und mein Code funktioniert.

Jetzt will ich sicherstellen, dass ich es „richtig“ mache, bekommt ein Feedback von erfahrenen .Net / SQL Server-Programmierern, die Art, die man sich beim Lesen der doc nicht bekommen.

Ich habe bemerkt, dass ich Code wie dies in einigen Orten haben:

var myTableDataTable = new MyDataSet.MyTableDataTable();
myTableTableAdapter.Fill(MyTableDataTable);

... // other code

In einer Single-User-Anwendung, würden Sie in der Regel tun, nur dieses eine Mal, wenn die App gestartet wird, ein Datatable-Objekt für jede Tabelle instanziiert und speichern Sie dann eine ref, um es so immer Sie gerade verwenden, dass einzelne Objekt, das bereits mit Daten gefüllt ist? Auf diese Weise würden Sie immer nur die Daten aus dem db habe einmal gelesen, statt möglicherweise mehrere Male. Oder ist der Aufwand für diese so klein, dass es einfach keine Rolle (plus könnte mit großen Tabellen kontraproduktiv sein)?

War es hilfreich?

Lösung

Für CE, ist es wahrscheinlich kein Thema. Wenn Sie diese App für Tausende von Benutzern schieben und sie waren alle ein zentrales DB treffen, sollten Sie einige Zeit auf der Optimierung verbringen. In einer Single-User-Instanz-DB wie CE, es sei denn, Sie Daten haben, die sagt, Sie optimieren müssen, würde ich keine Zeit sich Gedanken darüber verbringen. Vorzeitige Optimierung, etc.

Andere Tipps

Die Art und Weise Varys zwischen zwei Haupt paar Dinge zu entscheiden, 1. Sind die Daten gehen ständig sein zugreift 2. Gibt es eine Menge von Daten

Wenn Sie Konstanty die Daten in den Tabellen verwenden, laden Sie sie dann auf dem ersten Gebrauch. Wenn Sie nur gelegentlich die Daten verwenden, um die Tabelle zu füllen, wenn Sie es brauchen, und dann ist es zu verwerfen.

Zum Beispiel, wenn Sie 10 gui Bildschirme haben und nur verwenden myTableDataTable auf 1 von ihnen, lesen Sie es in nur auf diesem Bildschirm.

Die Wahl wirklich hängt nicht von C # selbst. Es kommt darauf an, ein Gleichgewicht zwischen:

  1. Wie oft nutzen Sie die Daten in Ihrem Code?
  2. Ändert die Daten überhaupt (und ist es Ihnen, wenn es der Fall ist)?
  3. Was die relativ (Zeit) Kosten sind wieder die Daten zu bekommen, im Vergleich zu allem anderen Code tut?
  4. Wie viel Wert setzen Sie auf Leistung , im Vergleich zu Entwickler Aufwand / Zeit (für diese spezielle Anwendung)?

Als allgemeine Regel gilt: für Produktionsanwendungen, in denen die Daten nicht oft ändern, würde ich wahrscheinlich die Datatable einmal erstellen und dann auf die Referenz halten, wie Sie erwähnen. Ich würde auch die Daten in einer typisierten Sammlung / list / Wörterbuch setzen, anstelle der allgemeinen Datatable-Klasse, wenn nichts anderes, weil es einfacher ist der Compiler meiner Eingabe fängt Fehler zu lassen.

Für ein einfaches Dienstprogramm, das Sie für selbst zu betreiben, dass „beginnt, macht seine Sache und Enden“, ist es wahrscheinlich nicht die Mühe wert.

Sie fragen nach Windows CE. In dieser besonderen Pflege, würde ich wahrscheinlich die Abfrage tut nur einmal und halten Sie auf die Ergebnisse. Mobile Betriebssysteme haben zusätzliche Einschränkungen in Batterien und Raum, dass die Desktop-Software nicht besitzt. Grundsätzlich ist ein mobiles O macht Kugel # 4 viel wichtiger.

Jedesmal, wenn man einen anderen Abfrageanruf von SQL hinzufügen, stellen Sie Anrufe zu externen Bibliotheken oft mehr, was bedeutet, dass Sie wahrscheinlich länger laufen, Aufteilung und mehr Speicher häufiger Freigabe (die Fragmentierung hinzufügt), und möglicherweise verursachen die Datenbank werden wieder -Lesen von Flash-Speicher. es ist wahrscheinlich viel besser auf die Daten zu halten, wenn Sie es haben, vorausgesetzt, dass Sie (Kugel # 2 sehen).

Es ist einfacher, die Antwort auf diese Frage herauszufinden, wann Sie Datensätze denken als eine „Session“ von Daten zu sein. Sie füllen die Datensätze; Sie arbeiten mit ihnen; und dann legen Sie die Daten zurück oder es verwerfen, wenn Sie fertig sind. Sie müssen also Fragen wie diese stellen:

  1. Wie Strom braucht die Daten zu sein? Haben Sie immer die sehr neuesten haben müssen, oder wird die Datenbank nicht häufig ändern?
  2. Was verwenden Sie die Daten? Wenn Sie nur für Berichte verwenden, dann können Sie ganz einfach einen Datensatz füllen, führen Sie Ihren Bericht, werfen dann den Datensatz entfernt, und das nächste Mal einfach macht einen neuen. Das wird Ihnen mehr aktuelle Daten trotzdem.
  3. Wie viel Daten reden wir? Sie haben gesagt, Sie arbeiten mit einem relativ kleinen Datenmenge, also gibt es keine große Speicher Auswirkungen, wenn Sie alles in den Speicher laden und halten Sie sie dort für immer.

Da Sie sagen, es ist ein Single-User-App ohne viele Daten, ich glaube, Sie zu Beginn sicher Laden alles sind in, es in Ihrem Datensätze eingeben und dann auf nahe zu aktualisieren.

Die Hauptsache Sie müssen mit betroffen sein in diesem Szenario ist: Was passiert, wenn die App nicht normal beendet wird, durch einen Absturz, Stromausfall, usw.? Will der Benutzer verlieren alle seine Arbeit? Aber wie es geschieht, Datensätze sind extrem einfach zu serialisiert, so können Sie ziemlich leicht implementieren ein „jeder sparen so oft“ vor, um die Datenmenge Inhalte auf die Festplatte serialisiert, sodass der Benutzer nicht viel Arbeit verlieren.

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