xb2.net Stresstest
Moderator: Moderatoren
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: xb2.net Stresstest
@Martin ich habe in der Anwendung etwa 20 Tool Funktionen sehr häufig verwendet. Diese rauszuschreiben resp. mit selbstgeschiebenen Funktionen zu ersetzen ist z.T. ein wenig aufwenig. Nur z.B. Filestr() was ist der bessere Weg? Memoread() FOpen()/FRead() Um sicher zu gehen das die selbstgeschiebenen Funktionen in allen Fällen korrekt funktionieren gehen sofort einige Tage oder Wochen drauf....... Sie müssen ja in ein Produktivsystem.....
Wenn ich als Test in der Loginfunktion filestr() durch memoread() ersetzte übersteht die Login Funktion den Stresstest.
Die Frage stellt sich jetzt: Ist Filestr() die einzige Kritische Funktion oder ist nun wirklich die Zeit gekommen und es besser die Tools mit selbstgeschriebenen Ersatzfunktionen zu ersetzten?
Dass Filestr() die Ursache dieses ganzen Problems ist hätte ich nie und nimmer gedacht! Danke für die Tips =D>
Viele Grüsse
carlo
Wenn ich als Test in der Loginfunktion filestr() durch memoread() ersetzte übersteht die Login Funktion den Stresstest.
Die Frage stellt sich jetzt: Ist Filestr() die einzige Kritische Funktion oder ist nun wirklich die Zeit gekommen und es besser die Tools mit selbstgeschriebenen Ersatzfunktionen zu ersetzten?
Dass Filestr() die Ursache dieses ganzen Problems ist hätte ich nie und nimmer gedacht! Danke für die Tips =D>
Viele Grüsse
carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Martin Altmann
- Foren-Administrator
- Beiträge: 16536
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 113 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: xb2.net Stresstest
Moin Carlo,
Und nein - ich würde mich nicht darauf verlassen, dass dies die einzige Funktion aus den Tools mit Problemen im Multithreading-Umfeld ist, ganz im Gegenteil!
Thema umschreiben:
Lass es so, wie es ist und schreibe peu à peu die aus den Tools genutzten Funktionen selber. Dann ein globales Suchen und Ersetzen der Funktionsnamen und schon stellst Du nach und nach um.
Alternativ kannst Du natürlich auch mit entsprechenden #translate-Direktiven arbeiten - macht aber in Deinem Fall wenig Sinn, da Du ja komplett von der eigentlich Funktion weg willst.
Viel Erfolg,
Martin
dafür gibt es die Erfahrung bzw. das Bauchgefühlramses hat geschrieben:Dass Filestr() die Ursache dieses ganzen Problems ist hätte ich nie und nimmer gedacht!
Und nein - ich würde mich nicht darauf verlassen, dass dies die einzige Funktion aus den Tools mit Problemen im Multithreading-Umfeld ist, ganz im Gegenteil!
Thema umschreiben:
Lass es so, wie es ist und schreibe peu à peu die aus den Tools genutzten Funktionen selber. Dann ein globales Suchen und Ersetzen der Funktionsnamen und schon stellst Du nach und nach um.
Alternativ kannst Du natürlich auch mit entsprechenden #translate-Direktiven arbeiten - macht aber in Deinem Fall wenig Sinn, da Du ja komplett von der eigentlich Funktion weg willst.
Viel Erfolg,
Martin
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.
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: xb2.net Stresstest
Hi,
was StrFile() angeht, schau dir mal meine Funktionen dazu an (die nutzen intern fopen() etc.)
http://www.xbaseforum.de/viewtopic.php?f=16&t=1811
Grundsätzlich kannst du für alle verwendeten Funktionen eine mit dem gleichen Namen und dem gleichen Verhalten schreiben,
dann brauchst du den Code nicht zu ändern. ICH MEINE dass eine gleichnamige Funktion aus der EXE immer vor
einer aus einer DLL geht, ohne dass es Fehler beim compilieren oder linken gibt. Einfach mal ausprobieren
PS: FALLS eine der Funktionen das Verhalten provoziert, ist selbstschreiben immer noch besser als auf Verbesserung zu hoffen
OB es aber eine dieser ist bzw. die gelinkte DLL komplett, das musst du schon selbst ausprobieren.
was StrFile() angeht, schau dir mal meine Funktionen dazu an (die nutzen intern fopen() etc.)
http://www.xbaseforum.de/viewtopic.php?f=16&t=1811
Grundsätzlich kannst du für alle verwendeten Funktionen eine mit dem gleichen Namen und dem gleichen Verhalten schreiben,
dann brauchst du den Code nicht zu ändern. ICH MEINE dass eine gleichnamige Funktion aus der EXE immer vor
einer aus einer DLL geht, ohne dass es Fehler beim compilieren oder linken gibt. Einfach mal ausprobieren
PS: FALLS eine der Funktionen das Verhalten provoziert, ist selbstschreiben immer noch besser als auf Verbesserung zu hoffen
OB es aber eine dieser ist bzw. die gelinkte DLL komplett, das musst du schon selbst ausprobieren.
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: xb2.net Stresstest
Hi
Danke für die Tips. Nach einigem Nachdenken habe ich mich jetzt entschlossen nur für die Webanwendung komplett auf die Tools zu verzichten und diese nicht mehr zur EXE zu linken. Ich denke es ist ein "No Go" die Tools mit den gewonnen Erkenntnissen/Problemen weiter zu verwenden. Auf dass Alaska was ändert warte ich sicher nicht........! (Leben die eigentlich noch??)
@Hubert, Es ist so eine Funktion aus der EXE ersetzt diejenige einer DLL. Die beiden erwähnten Funktionen stehen jetzt an erster Stelle in meinen XBTRepla.PRG
@Martin, nein ich mach jetzt "Hau Ruck" Tools komplett raus!
Viele Grüsse
Carlo
Danke für die Tips. Nach einigem Nachdenken habe ich mich jetzt entschlossen nur für die Webanwendung komplett auf die Tools zu verzichten und diese nicht mehr zur EXE zu linken. Ich denke es ist ein "No Go" die Tools mit den gewonnen Erkenntnissen/Problemen weiter zu verwenden. Auf dass Alaska was ändert warte ich sicher nicht........! (Leben die eigentlich noch??)
@Hubert, Es ist so eine Funktion aus der EXE ersetzt diejenige einer DLL. Die beiden erwähnten Funktionen stehen jetzt an erster Stelle in meinen XBTRepla.PRG
@Martin, nein ich mach jetzt "Hau Ruck" Tools komplett raus!
Viele Grüsse
Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: xb2.net Stresstest
Speziell bei Str2Disk() oder set alternate to muss man natürlich im Hinterkopf haben, dass
die Dateinamen auf jeden Fall einmalig sind. Die sharen ja nicht
die Dateinamen auf jeden Fall einmalig sind. Die sharen ja nicht
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: xb2.net Stresstest
@Hubert bei deiner Funktion FileStr() musst du noch die beiden Local Vars initialisieren cBuffer := "", nReadBytes := 0 anderfalls ergibt die Funktion bei einem File-Lesefehler in der Zeile return left(cBuffer,nReadBytes) einen Laufzeitfehler. Keine Angst es sind alles einmalige Files
Viele Grüsse
Carlo
Viele Grüsse
Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: xb2.net Stresstest
Hi,
danke, habe ich bei File2Str() erledigt
Lokal hatte ich damit noch nie einen Lesefehler sonst wäre es mir aufgefallen
danke, habe ich bei File2Str() erledigt
Lokal hatte ich damit noch nie einen Lesefehler sonst wäre es mir aufgefallen
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: xb2.net Stresstest
@Hubert, ich habe mich jetzt lange mit dem Stresstest beschäftigt, viele Funktionen mussten ersetzt werden, sogar solche von xBase selbst, auch die Funktion fileStr() musste noch verändert werden, die Original Funktion liefert sonst bei Zugriff (Schreiben/Lesen) aus verschiedenen Threads auf selbe File, kuriose Ergebnisse.
Was meinst du zu den Anpassungen?
Viele Grüsse
Carlo
Was meinst du zu den Anpassungen?
Viele Grüsse
Carlo
Code: Alles auswählen
// --------------------------------------------------------------------
function FileStr(cFile,nStartPos,nLen,nError, lExclusive) // ..., @nError ) !!
local nHandle, cBuffer := "", nReadBytes := 0,nSeekPos, i := 0
DEFAULT nStartPos TO 1 // normalerweise will man das 1. Zeichen.
DEFAULT nLen TO 0 // 0 steht fr keine Begrenzung
default lExclusive to .t. // Vorgabe EXCLUSIVES Open
if nStartPos < 1
nStartPos := 1
endif
nError := 0 // 0 steht fr keinen Fehler
do while (nHandle := FOpen(cFile, iif(lExclusive, FO_EXCLUSIVE,FO_SHARED) ) ) < 0
if ++i > 9 .or. !file(cFile)
exit
endif
Sleep(20)
enddo
if nHandle = -1
nError := FError()
else
if nLen=0
nLen := FSize( nHandle )
endif
if nStartPos > 1
nSeekPos := FSeek( nHandle, nStartPos-1 )
if nSeekPos <> nStartPos-1
nError := -2
endif
endif
cBuffer := space(nLen)
nReadBytes := FRead( nHandle, @cBuffer, nLen)
if nReadBytes < nLen // Fehler oder Dateiende ?
nError := FError()
endif
endif
FClose(nHandle)
return left(cBuffer,nReadBytes)
Valar Morghulis
Gruss Carlo
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: xb2.net Stresstest
Hi,
entscheident ist, dass es funktioniert
PS: ich benutze Textdateien nie shared, allerdings habe ich auch kein Programm, welches mit mehreren Threads gleichzeitig auf eine Textdatei zugreifen müsste.
Lesezugriffe mit einer SHARED READ ONLY sollten aber immer problemlos funktionieren.
Man sollte eventuell den SLEEP() in der Schleife mit einem Zufälligen Wert zwischen 5 und 20 füttern ...
entscheident ist, dass es funktioniert
PS: ich benutze Textdateien nie shared, allerdings habe ich auch kein Programm, welches mit mehreren Threads gleichzeitig auf eine Textdatei zugreifen müsste.
Lesezugriffe mit einer SHARED READ ONLY sollten aber immer problemlos funktionieren.
Man sollte eventuell den SLEEP() in der Schleife mit einem Zufälligen Wert zwischen 5 und 20 füttern ...
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: xb2.net Stresstest
@Hubert, danke guter Tip habe ich noch gemacht.
@ALL die Obige Funktion FileStr() kann nicht als direkter Ersatz für XBTools verwendet werden wenn mehr als Parameter 1 (Filename) verwendet wird. Die Parameter 2+3 sind vertauscht, und nStartPos hat andere Funktion!!!!!
@ALL die Obige Funktion FileStr() kann nicht als direkter Ersatz für XBTools verwendet werden wenn mehr als Parameter 1 (Filename) verwendet wird. Die Parameter 2+3 sind vertauscht, und nStartPos hat andere Funktion!!!!!
Valar Morghulis
Gruss Carlo
Gruss Carlo