Wie hängt man neue tDS-Daten effizient an bestehende Daten an

  • VB.NET
  • .NET 4.5

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Wie hängt man neue tDS-Daten effizient an bestehende Daten an

    Hallo zusammen.

    Ich werde das Gefühl nicht los, dass ich den Baum vor lauter Wäldern nicht mehr sehe und sinnlos gedanklich blockiert werde. Daher bin ich für neue Ideen offen und dankbar. Voraussetzung ist allerdings, dass nicht mein komplettes Datenmodell zerlegt wird.

    Ich habe ein privates Kassenbuch (KaBu), welches seine Daten in einem tDS abspeichert. Ich habe mehrere DataTables, z.B. bisher verwendete Orte, Verrechnungsstellen und getätigte Zahlungsvorgänge. Letztere enthalten mithilfe von Referenz-IDs Verweise auf die anderen DataTables. 1x pro Monat schließe ich das KaBu ab, was dazu führt, dass die Daten der Zahlungsvorgänge verschlüsselt abgespeichert und aus dem aktuellen KaBu werden.

    Soweit Form1 (FrmMain).

    Nun zu Form2 (FrmAnalyse):
    Für eine spätere Auswertung können die Vorgangsdaten read-only in einem weiteren Formular importiert werden. Nun habe ich das Problem, dass ich natürlich all die schnuckligen DataBinding-, Filter-, Sortier-, LINQ-Funktionen nutzen möchte, die ein tDS direkt oder indirekt bietet. Dazu mache ich bisher folgendes:
    • Datei 1 auslesen
    • XML-Daten entschlüsseln
    • die Vorgangsdaten ins tDS und somit über DataBinding ins read-only-DGV einlesen lassen

    funktioniert soweit problemlos.
    Wenn ich aber mehrere Dateien/Monate importieren will, stehe ich vor dem Problem, dass ich die zusätzlichen Daten anhängen muss. Bisher gehe ich den Weg über Erzeugung eines tDS-Klons. Ich lese die XML-Vorgangsdaten in jenen Klon ein. Danach fusioniere ich die Prozessdaten vom Original-tDS mit dem Hilfs-tDS mittels Tds.VorgangsDataTable.Merge(AdditionalTds.VorgangsDataTable). Das Problem an der Sache: Es dauert zu lange. Pro Monat sind es vielleicht 50 Vorgänge. Bei 8 Jahren ergeben sich 4800 Vorgänge. Und das dauert einfach viel zu lange. Anfangs noch recht flink, vergeht nach ca. 12 eingelesenen Monaten pro weiteren Monat eine Sekunde, Tendenz steigend. Ich lass das absichtlich nicht in einem Nebenthread machen, damit ich die Performance sehen kann. Dabei sehe ich eben: Das Mergen dauert einfach zu lange. Und nach einer Minute bekomme ich ne nette Meldung:

    Die Meldung braucht mir nicht erklärt zu werden. Sie ist aussagekräftig genug.

    Ich habe auch schon EnforceConstraints auf false gesetzt und es mit einer Kopie statt einem Klon versucht. Ohne merkbaren Unterschied. Das Mergen ist einfach der Zeitdieb hier.

    Wie kann ich diesen Append-Vorgang effizienter gestalten?

    Anmerkung: Das KaBu ist nur für private Zwecke. Keine offizielle Verwendung, also nix mit Finanzamtdatenerstellung und Co., falls da jemand präventiv Alarm schlagen will ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Vielen Dank.
    Nachdem ich dem DGV die DataSource während des Ladens wegnahm und den Ladeprozess mit BindingSource.SuspendBinding und BindingSource.ResumeBinding "umrahmte", steigerte sich die Performance dramatisch. Die BindingSource grätschte mir schon vor einigen Tagen rein, als ich vergaß, dass ein Filter aktiviert war. Der hat auch höllisch Performance gekostet.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.