Programmabsturz (XPPFATAL.LOG) - wahrscheinlich Mem.-problem

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hmm.
Ich habe mir mal meinen Code (historisch gewachsen) angeschaut und einige Stellen identifiziert, die ursächlich für das Verhalten sein könnten.
Da definiere ich im Code mehrere unterschiedlich große Arrays als private, die ich am Ende der Funktionen jeweils wieder RELEASEe.
Ich habe die Definitionen im Code entfernt, die Variablen als local deklariert, im Code dann als ARRAY( größe ) definiert und am Ende der Funktion jeweils auf NIL gesetzt:

Code: Alles auswählen

function...
local ringe
....
ringe := array( 600 )
....
ringe := NIL
return
Hat aber nix geändert :( Die Abstürze nach einem zweiten (manchmal dritten) Aufruf des Menüpunktes bleiben...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Hubert hat geschrieben:In meiner Erinnerung, dient er aber nicht zum Auffinden von Speicherlecks, sondern um Zeitbremsen aufzuspüren.
Stimmt. Für die Suche nach Speicherlecks sollte man memwatch nehmen. Da kann man solche Sachen sehr gut beobachten.

Jan
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Hallo Martin,

ich habe mir es angewöhnt das wegen der Übersichtlichkeit so zu machen:
Local Ringe := ARRAY(600), das geht glaube ich auch schneller.

Die Frage ist was Du mit dem Array machst, denn an der Deklaration und
Array(600) kann es normal nicht liegen.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Nun,
ich schreibe Werte rein, sortiere, iteriere und gebe den Inhalt in ein Textfile (rtf).
MEMWATCHER kann ich wohl nicht nehmen:
  • Geht nicht unter XP
  • Zeigt keine LOCALs an
Habe hier derzeit eh' nur die von 1.80 - muss nachher mal schauen, ob ich die für 1.90.331 heruntergeladen bekomme...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Martin,

also zumindest die 1.9.331 läuft auch unter XP. Allerdings hast Du Recht: Keine Locals.

Jan
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Ja,
und die Heaps kann ich auch nicht überwachen!
Bei Anzeige der Publics stürzt der MEMWATCH bei mir ab.
Aber er zeigt mir unabhängig davon, dass die Memory-Handles von ca. 10.000 (nach dem Start des Programmes) bis auf etwas über 21.000 ansteigen (beim zweiten Aufruf der betreffenden Funktion), bevor er dann abschmiert...
Nach dem ersten Durchlauf fällt der Wert der Memory Handles wieder auf etwas über 10.000 zurück, aber es sind insgesmt ca. 500-700 mehr belegt, als am Anfang - so als ob die Arrays nicht wirklich aus dem Speicher entfernt würden...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

So,
habe die Dikussion aus dem Unterforum XUG mal hierher verschoben.
Er stürzt immer mit dem Fehler "Betriebssystemfehler: Zugriff verweigert" ab. Scheinbar jetzt auch konsisten an der selben Stelle.
Aber das kann nicht das wirkliche Problem sein!
Er zeigt kurz das Fehlerfenster an, das man normalerweise bestätigen kann, um eine XPPERROR.LOG erzeugt zu bekommen. Aber kurz danach stürzt er selber ab und schreibt die XPPFATAL.LOG.
Der Absturz kommt am Ende der Funktion, in einer Zeile, in der nur USE steht, um eine Datei zu schliessen.
Diese Datei wird nur am Anfang dieser Funkstion geöffnet und in keiner anderen der Funktionen genutzt. Am Ende der Funktion werden alle Dateien geschlosen, so auch diese.
Ich komme nicht wirklich weiter an dieser Stelle...
Hier mal die aktuelle XPPFATAL.LOG:
FATAL ERROR LOG
System-Error
SYS Thread-ID: 896
Module: MOM
Error Codes: EH: 4 Sub: 5(5) OS: 5 XPP: 40
Call Stack of Thread 1 (1596):
STANDARDEH(204)
(B)ERRORSYS@0000(52)
KONVERT(3095)
BINDEN(1847)
KATBINDE(1677)
(B)ERZEUGEMENU@0045(489)
APPEXEC(208)
MAIN(777)
Call Stack of Thread 2 (1288):
Call Stack of Thread 3 (1228):
Call Stack of Thread 4 (1180):
Call Stack of Thread 5 (896):
DSSETPOINTER(1815)
DSSETPOINTER(1830)
DSSETPOINTER(1830)
@DSDIALOG@I@SETPOINTER(4541)
@RUNDOG@I@EXECUTE(29)
Call Stack of Thread 6 (572):
File: c:\easydogw\easydogw.EXE
TimeStamp: 20080806 15:32
End of FATAL ERROR LOG.
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,

das ganze erinnert mich an meine "Timeout Threads" die den Speicher
vollgemacht haben wenn die LOCAL, PRIVATE oder PUBLIC waren.

Das einzige was ging war eine STATIC ... die ist nicht angewachsen.
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
wie meinst Du das jetzt?
Meinst Du, ich soll statt meine Arrays local zu definieren sie als static erzeugen?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hmm,
hat nicht wirklich was gebracht - ausser, dass er jetzt beim zweiten Durchlauf etwas früher abstürzt, mit der folgenden XPPFATAL.LOG:
FATAL ERROR LOG
System-Error
SYS Thread-ID: 896
Module: MOM
Error Codes: EH: 4 Sub: 5(5) OS: 5 XPP: 40
Call Stack of Thread 1 (1596):
KONVERT(2790)
BINDEN(1847)
KATBINDE(1677)
(B)ERZEUGEMENU@0045(489)
APPEXEC(208)
MAIN(777)
Call Stack of Thread 2 (1288):
Call Stack of Thread 3 (1228):
Call Stack of Thread 4 (1180):
Call Stack of Thread 5 (896):
DSSETPOINTER(1794)
@DSDIALOG@I@SETPOINTER(4541)
@RUNDOG@I@EXECUTE(29)
Call Stack of Thread 6 (572):
File: c:\easydogw\easydogw.EXE
TimeStamp: 20080806 16:49
End of FATAL ERROR LOG.
Die betreffende Zeile 2790 der Funktion konvert:

Code: Alles auswählen

z := alltrim( str( w ) )
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,

und was wäre wenn du AADD() nimmst ?

Ich bin mir nicht sicher aber ich glaube ich hatte mal versucht ein Array
mit > 512 so anzulegen ( ARRAY(512) ) und irgendwo knallte es dann.
Nach dem umstellen auf AADD() ging es Problemlos.
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hmmm,
habe es mit aadd probiert - die Arrays sowohl static als auch local - kein wirklicher Unterschied...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,

Code: Alles auswählen

z := alltrim( str( w ) )
sag mal "wie gross" ist "w" ?
... und ohne ALLTRIM() (nur mal zum testen) ?

sonst irgendwas in deiner KONVERT was den Speicher erhöhen könnte
oder referencen anlegt (aClone) die evtl. nicht freigegeben werden ?

wieviel RAM, wieviel Swapdisk ?
TEMP, TMP Path ?
User Speicherplatz Kontigent ?

... und was passiert wenn du "lange wartest" zwischen 2 Aufrufen ?
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
die Zeile kannst Du vergessen - beim nächsten Mal kam eine Zeile, in der ein Indexfile angelegt werden soll.
w ist eine Zahl zwischen 1 und 20.
AClones habe ich jetzt eingebaut, da ich Deinen Tipp mit dem AADD beherzigt habe und von einige Arrays Kopien brauche.
Aber auch diese setze ich am Ende der Funktion auf NIL.
Der Memwatch hat mir vorhin angezeigt, dass mein Programm gut 5MB belegt (used Memory in KB).
RAM habe ich 3 GB, davon waren vorhin noch einige verfügbar!
Swapfile habe ich hier fix auf 3GB eingestellt.
Also alles unproblematisch.
Habe eben mal den Menüpunkt aufgerufen, danach einige andere Menüpunkte mit teilweise extrem vielen Xbase-Parts drin und danach wieder den kritischen - ist wieder geknallt, diesmal etwas früher, noch in dem Fenster, in dem ich die Einstellungen vornehmen kann.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,

also back to the roots : welche Hotfix verwendest du ?

Hotfix #10 : FIX 109-5592 Str() and StrZero() may lead to IDSC or application abort.

schon mal mit der SL1 getestet ?
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
ich nutze aktuell 1.90.331 - also ohne Hotfixes.
Heute Abend wollte ich das zu Hause sowieso mal mit dem SL1 testen.
Mal schauen, ob sich da was ändert...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

So,
bin jetzt erst aus der Cocktail-Bar zurück...
Habe es mit dem SL1 getestet - der gleiche Effekt :(

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Habe es mittlerweile auch mal mit VX probiert, da ich mir davon mehr erhoffte, was die Ursachenforschung anbelangte (Debugger) - Fehlanzeige.
Hier mal einige Hintergrundinfos - vielleicht hat ja noch jemand eine Idee?
Im Programm sind u. a. permanent 5 Arrays vorhanden, mit (bei dem Test) jeweils 428 Elementen.
Zwei Arrays enhalten Elemente von jeweils ein Zeichen Länge, zwei Arrays Elemente von jeweils dreistelligen Zahlen und ein Array Zeichenketten von bis zu 40 Zeichen Länge.
In der betreffenden Funktion werden nochmals 6 Arrays angelegt (local), die jeweils 428 Elemente aus dreistelligen Zahlen enthalten.
Diese werden vor dem Verlassen der Funktion auch wieder auf NIL gesetzt (obwohl sie ja local sind...)
Meine EXE ist knapp 35 MB groß, alle DLLs, die ich nutze (keine eigenen), insgesamt 21 MB - also nichts wirklich außergewöhnliches...
Wenn ich die Funktion ein zweites Mal aufrufe, knallt es (sehr selten erst beim dirtten Aufruf).
Ich kann nach dem ersten Aufruf beliebig viele andere Menüpunkte aufrufen und auch Fenster mit massig XBaseparts aufrufen - ohne Probleme.
Selbst die Menüpunkte, in denen die selben Datenbanken geöffnet werden, funktionieren.
Nur wenn ich dann diese Funktion erneut aufrufe, treten die (Memory?)probleme auf...
Naja, morgen werde ich mir den Ostseewind um die Ohren wehen lassen - vielleicht habe ich da ja wider Erwarten noch eine Idee...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

In der betreffenden Funktion werden nochmals 6 Arrays angelegt (local), die jeweils 428 Elemente aus dreistelligen Zahlen enthalten.
Diese werden vor dem Verlassen der Funktion auch wieder auf NIL gesetzt (obwohl sie ja local sind...)
In dieser Funktion sollte das Problem liegen.

Ich vermute, dass die neuen Arrays Daten aus den 6 bereits vorhandenen Array beziehen.

Grundsätzlich würde ich die Ausgangsarray noch einmal als Kopie mittels aclone als Local anlegen.
Anschließend die neuen Arrays aufbauen und ggf. mit Werte aus den Kopien füllen.
Mit Ende der Funktion alle als Local definierten Array`s die Elemente zunächst mit dem Wert „NIL“ füllen, anschließend die Array´s selbst den Wert NIL zuordnen.

Dann sollte keine „Speicherlecks“ mehr auftreten.

Gruß, Olaf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Olaf,
nein - die sechs Arrays enthalten keine Daten aus den fünf permanenten.
Wenn ich Arrays doppele (was ich in der Funktion auch tue), so tue ich dies grundsätzlich per AClone() - mit ACopy() gibt es ja keine "echte" Kopie.
Wenn ich vor dem aArray1 := NIL ein AFill( aArray, NIL ) mache, soll das was ändern? Werde ich gleich mal ausprobieren.
Hat leider auch nichts geändert, aber trotzdem vielen Dank für den Tipp!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

So,
ich habe einen "Testroboter" geschrieben und den Fehler jetzt eingegrenzt.
Er ist (wie ja auch von mir bereits vermutet) nicht in der Funktion, in der das Programm mit dem XPPFATAL.LOG bisher ausgestiegen war.
Nun werde ich mir den Rest der Woche mal die entsprechende Funktion genauer anschauen...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Christof
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Mo, 01. Okt 2007 17:14
Wohnort: Bedburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Beitrag von Christof »

Hallo Martin,

ich habe auch hin und wieder mit unerklärlichen Abstürzen zu kämpfen. Bisher hab' ich es einfach auf zu wenig Arbeitsspeicher geschoben. Aber das ist/war wohl nur eine Alibibehauptung, weil ich es nicht anders eingrenzen konnte.
Deshalb bin ich ganz gespannt auf Deine Ergebnisse. Bitte, bitte hier posten.

Danke und Gruß

Christof
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Christof,
gerne. Hatte heute auch schon einige Ideen - aber leider haben die Änderungen nicht viel gebracht. Hatte heute nicht so viel Zeit, da ich ja leider auch mal für meinen Arbeitgeber arbeiten muß :-)
Ich arbeite in der Funktion viel mit Filtern und Schleifen - ich werde morgen eine weitere, größere Änderung probieren (so die Zeit reicht) und dann berichten.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

So,
Problem gelöst!
Es ist das, was ich befürchtet hatte - durch die Änderung habe ich jetzt zwar 3.285 Zeilen mehr Code, aber dafür läuft es wenigstens Problemlos. Habe durch meinen Testroboter 20 Durchläufe testen lassen - ohne Probleme!
Vor der Änderung war ja schon nach 2 Durchläufen Schluß!
Was war die Ursache? Nun, ich wollte damals meinen Code optimieren und Dinge zusammenfassen, so dass es möglichst wenige Zeilen Code ergibt.
In dieser Funktion, in der ich einen Teil des Kataloges erzeuge, werden die Zusatzwettbewerbe eingebunden - davon gibt es insgesamt 4 verschiedene.
Eine Schau kann über bis zu drei Tage gehen - an jedem dieser Tage können die Zusatzwettbewerbe stattfinden.
Die Reihenfolge im Katalog soll sein:
Zusatzwettbewerb1 am 1. Tag, 2. Tag, 3. Tag
Zusatzwettbewerb2 am 1. Tag, 2. Tag, 3. Tag
Zusatzwettbewerb3 am 1. Tag, 2. Tag, 3. Tag
Zusatzwettbewerb4 am 1. Tag, 2. Tag, 3. Tag
Also habe ich mir gedacht: Sei schlau, nimm eine FOR-Schleife und Filter.
Ich habe also vier FOR-Schleifen genommen (eine pro Zusatzwettbewerb) und den Filter immer entsprechend gesetzt (also nach dem jeweiligen Zusatzwettbewerb (innerhalb der FOR-Schleife immer gleich) und dem jeweiligen Tag (innerhalb der FOR-Schleife der Zähler)).
Und das war die Ursache!
Ich habe jetzt die Schleifen aufgelöst und die Blöcke jeweils dreimal in den Code geschrieben - natürlich immer die jeweilige Filterbedingung genommen.
Und jetzt geht es! Nicht immer ist also weniger besser :roll:
Der Schleifenindex war übrigens eine local und der Start und Endwert jeweils private.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Moin Martin,

sorry, aber ich werde aus Deiner Mail nicht ganz schlau. Was war denn nun Dein Fehler? Mehrere FOR...NEXT-Schleifen zu schachteln? Oder Filter in die Schleifen zu setzen? Oder was?

Bei dem, was Du beschrieben hast, sehe ich nicht wirklich einen Fehler im eigentlichen Sinn.

Jan
Antworten