[Keine Rückmeldung] -> Programm abgestürzt?

daDom

Erfahrenes Mitglied
Eine wichtige Frage:

Da ich ein programm schreibe, das 5000x5000 zeilen überprüfen muss, frage ich mich, ob es normal ist, (wenn VB doll am Rechnen ist)
das im Taskmanager gesagt wird, das Programm gebe keine Rückmeldung...
 
hallo daDom,

prüfe mal im Programmcode, ob eventuell eine Endlosschleife entstanden ist.

Starte dein Programm mal im Debug-Modus 'RUN' und nach ca. 5 min beendest du diesen Vorgang mit der Tastenkombination 'Ctrl + Pause', dann bleibt dein Programm an einer wahrscheinlich entlosen Schleife stehen und du kannst dann den Fehler ausfindig machen.

ANI
 
Hi Ani!

Danke, ich weiss inzwischen, das es keine Endlosschleife ist, aber du hast mir mit der tastenkombination "Ctrl+Pause" echt weiter geholfen...

Damit halte ich doch VB während dem Rechnen an, oder?

Super, !

(Für die 5000x5000zeilen hat mein Rechner 20min gebraucht. AMD XP 2200+ | 1024 DDR-Ram | MSI K7T266 Pro2 )

Ein anderer mit 900mhz hat dafür die doppelte Zeit gebraucht... :rolleyes:

grüsse
daDom
 
Wenn du ein DoEvents in deine Schleife haust, hat das Programm Zeit Windows eine Rückmeldung zu geben. Dann sieht es auhc nicht so aus als wäre es abgestürzt.
 
Code:
Do While(fertig=True)
   DoEvents
   MachWas()
Loop
So in etwa.
Allerdings, solltest du dir genau überlegen wie du mit den 5000x5000 Zeilen umgehen willst, da kann man nähmlich viel machen.
Allerdings ist VB nicht gerade optimal für zeitkritische Berechnungen.
Was ist das für ne Berechnung, wie sind die Daten organisiert?

Gruß Homer
 
Hi!

Das sind 2 Datenbanken, die in txt-Files exportiert sind.

Die Datensätze enthalten Vornamen, Nachnamen, Postleitzahl, Ort etc...

Diese sind ruch Semikolon's(;) getrennt.

Das Programm liest eine Zeile aus DB-Nr1 aus, steckt Vornamen, Nachnamen, Postleitzahl, Ort etc in Variablen (Data_Vornamen, Data_Nachnamen, Data_Postleitzahl, Data_Ort).
Das gleiche dann mit DB-Nr2.

Wenn ein Eintrag in DB-Nr1 ausgelesen == Alle 5000 EInträge in DB-Nr2 vergleichen.
&&
Wenn ein Eintrag in DB-Nr2 ausgelesen == Alle 5000 EInträge in DB-Nr1 vergleichen.

Bevor die Einträge verglichen werden können, müssen die Daten (Data_Vornamen, Data_Nachnamen, Data_Postleitzahl, Data_Ort) natürlich erst ausgelesen werden.

Joa, so knnte man die Funktionsweise beschreiben.

Dabei komme ich so auf ungefähr 1000 Zeilen(inklusive der selbstverständlichen Kommentare).
 
Also wenn ich dich da einigermaßen richtig verstanden habe, dann ließt du für jeden Satz aus DB1 alle 5000 Sätze aus DB2 das macht 5000*5000 = 25 Mio. mal. Und das ganze dann Umgekehrt, d.h. du hast da 50 Mio. Durchläufe.
Das ist eindeutig zuviel.
Die Frage ist was musst du Vergleichen bzw. welchen Vergleich brauchst du. Musst du herausfinden, ob ein Datensatz in DB1 exakt einem Datensatz in DB2 entspricht (DB1.Name=DB2.Name And DB1.Vorname=DB2.Vornamen And ....) oder welches Ergebnis brauchst du dabei.
Ich würde mal sagen, mit einer besseren Datenorganisierung und Datenstruckturierunge, kannst du da schon einiges an performance rausholen.
Denn das was du da im Moment machst, ist sorry absoluter Overkill.
Wenn du etwas nächer auf den Vergleich eingehst, dann kann ich dir besser helfen.
Ectl. würde sich auch anbieten das Ganze nicht in VB zu machen, weil VB sowieso zu Lagsam ist.

Gruß Homer
 
Code:
    '*******************************************************
    '*******************************************************
    'April-Datenbank-> Einträge, die nicht in Nov-Datenbank?
    '-> Anzeigen | löschen!
    '*******************************************************
    '*******************************************************
    Do While Not EOF(2)
        If (Not (Data_Nachname = Data_Nachname1)) And _
        (Not (Data_Postleitzahl = Data_Postleitzahl1)) And _
        (Not (Data_Ort = Data_Ort1)) Then
            '''''''''''''
            If Data_Nachname1 = "xxx" Then
            'MsgBox "EINE ÄNDERUNG GEFUNDEN!", vbOKOnly, "Juhuuu!"
                lstÄnderungen.AddItem (Data_Name & ";" & ";" & Data_Postleitzahl & ";" & Data_Nachname & ";" & Data_Ort & " | Nicht in AprilDB vorhanden -> wurde verändert, oder ist neu. | in Zeile=" & Zeilennummer1)
            End If
            
            Exit Do
            '''''''''''''
        ElseIf (Data_Nachname = Data_Nachname1) And _
        (Data_Postleitzahl = Data_Postleitzahl1) And _
        (Data_Ort = Data_Ort1) Then
            '''''''''''''
            Close #2
            'sub beenden und die nächste zeile der 1. DB auslesen
            Exit Sub
            '''''''''''''
        Else
            Exit Do
        End If
    Loop

Das mache ich hier...

Btw: Ich überlege sowieso auf C/C++ umzusteigen, da VB jedes mal, wenn ich CommonDialog's etc nutze, diese dazugehörigen *.dll's braucht.

Ich lerne VB auch in der Schule, aber mein Lehrer ist einfach total inkompetent :(
Wir bekommen jede Stunde unzählige Blätter - die meisten sind dann auch noch nur in Word abgetippt und enthalten zig Fehler... :mad:

Einfach traurig :(
 
Zurück