vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Programmabsturz bei Dataset.AcceptChanges und kein Internet 
Autor: Bazi
Datum: 01.07.20 08:18

Hallo,
in einem meiner Programme habe ich seit kurzem ein seltsames Verhalten.
Nach Öffnen einer Datei stürtz das Programm ab. Aber komischer Weise nur, wenn keine Internetverbindung besteht. Beim Debuggen kommt ein Hinweis auf ein DeadLock (60 Sekunden keine Meldung ...).
Durch diverse Statusmeldungen konnte ich es auf das Me.AcceptChanges zurückführen. In den Catch-Block wird nicht gesprungen.
Dieses Verhalten ist reproduzierbar und tritt nur auf, wenn keine Internetverbindung besteht.

Das Programm selbst arbeitet mit einem Typisierten Dataset und xml only. Jedesmal wenn ich die Datendatei wechsle passiert das oben beschriebene.
Die Dateigröße der Xml-Datei liegt derzeit bei 15.218 KB

Genutz wird das Programm auf Windows10 Tablets mit 4,6 und 8 GB Arbeitsspeicher. Der Absturz passiert auf allen Geräten.

Try
            sb.Hinweis = "verarbeite Änderungen"
            sb.Progress = 99
            'InfoBox("AcceptChanges")
            Me.AcceptChanges()
            sb.Hinweis = "erstelle Filter"
            'Dim AcceptEnd = Now
            'InfoBox("Das Accept dauerte " & AcceptEnd.Subtract( 
            ' AcceptBeginn).TotalSeconds & " Sekunden")
            'InfoBox("createFRows")
            createFRows()
        Catch ex As Exception
            InfoBox(ex.Message, True, 3500)
        End Try
Habt Ihr Tipps was ich machen kann?

Gruß Christian
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Programmabsturz bei Dataset.AcceptChanges und kein Internet 
Autor: Manfred X
Datum: 01.07.20 10:56

Hallo!

Warum AcceptChanges? Wofür wird diese Anweisung benötigt?
Eine XML-Datei in einer Größe von 15MB zu laden, kann einige
Zeit dauern.
Eventuell Speicherüberlauf, Stapelüberlauf (Rekursion) oder TimeOut.
Verwendest Du MultiThreading?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Programmabsturz bei Dataset.AcceptChanges und kein Internet 
Autor: Bazi
Datum: 01.07.20 12:20

Hi,
Multithreading im kleinen Umfang ja, aber nicht im Bereich des Ladens der Daten.
Ich verwende es z.B. für die Dateien der Automatischen Sicherung.
Das sollte in diesem Fall also zu vernachlässigen sein.

Das AcceptChanges habe ich drin da es vorkommt dass im Betrieb die Datendatei gewechselt wird.
Ich lese dann mit ReadXml die neuen Daten ein und rufe danach AcceptChanges auf. Warum das so ist, ? Weil ich gelesen habe dass man das so macht. Probiere es aber später mal was es ausmacht wenn ich das weglasse.
Früher ist das nie aufgefallen, da waren die Dateien kleiner. Nun fällt das ins Gewicht.

Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Programmabsturz bei Dataset.AcceptChanges und kein Internet 
Autor: Manfred X
Datum: 01.07.20 13:05

Vor dem Laden neuer Daten:
Unterbreche zunächst die Datenbindung der Datatable.
Lösche vor dem Laden einer neuen Datei die Daten (Clear)in der Datatable
und setze die Variable danach auf Nothing. Fülle eine neue Instanz mit den
Datei-Daten. Stelle die Datenbindung wieder her.

Die DeadLock-Meldung spricht stark dafür, das ein Thread blockiert worden ist
und deshalb nicht mehr reagiert. Kann es z.B. eine "Kollision" zwischen dem
automatischen Speichern und einer anderen Funktion geben z.b. dem Laden neuer
Daten. Bei großen Datenmengen im XML-Format wird Zeit benötigt und es kann deshalb
zu Überlappungen kommen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Programmabsturz bei Dataset.AcceptChanges und kein Internet 
Autor: Bazi
Datum: 02.07.20 10:02

Hm, die Überschneidung zwischen automatischem Speichern und dem Einlesen habe ich meiner Meinung nach unterbunden. Ich Kopiere zum Sichern das DataSet und schreibe die Sicherung mit der Kopie.

Habe den Code beim öffnen einer neuen Datei nun Deiner Empfehlung nach geändert. Mal sehen was sich ändert.

Nach meinen bisherigen Prüfungen ist das Lesen nicht das Thema, eingelesen wird in rund 5 Sekunden bei der Datenmenge. Zeitbedarf hat das AcceptChanges, warum auch immer.
Die Meldung mit dem DeadLock habe ich nun wegbekommen indem ich das AcceptChanges nicht mehr für das gesamte DataSet, sondern für die einzelnen Tables separat aufrufe und dazwischen immer wieder eine Debugmeldung des Tabellennamens bringe. Ist aber nur eine Notlösung. Möglicherweise gehe ich mit dem AcceptChanges noch auf die einzelnen DataRows.
Soweit ich es verstanden habe ändert doch das AcceptChanges nur den Status der DataRows auf Unchanged?

Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Programmabsturz bei Dataset.AcceptChanges und kein Internet 
Autor: Manfred X
Datum: 02.07.20 11:37

Die AcceptChanges-Methode ist relevant bei Datenbankanwendungen, um ggf. das Update
geänderter Datensätze zu unterbinden. Gewöhnlich wird diese Methode nicht im Code
direkt verwendet, sondern sie gehört zur Infrastruktur des Updates.
Was willst Du mit diesem Aufruf erreichen? Wenn Du den Inhalt zu lesender Dateien
in neu erstellte Datenquell-Instanzen einliest, hast Du keine Probleme und mußt
nichts zurücksetzen.
Ich vermute, dieses AcceptChanges setzt eine Ereigniskette in Gang, d.h. es werden
dadurch Eventhandler ausgelöst und deren Code wird (sinnlos) ausgeführt.
Acceptchanges kann relevant werden, wenn Datensätze an Tabellen angehängt werden,
aber die Folgen dieses Aufrufs müssen dann auch bedacht und verarbeitet werden (eventuell
temporäres Blockieren der Eventhandler).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel