xb2.net Stresstest

Xb2.Net von Boris Borzic

Moderator: Moderatoren

ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: xb2.net Stresstest

Beitrag von ramses »

@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! :shock: Danke für die Tips =D>

Viele Grüsse

carlo
Valar Morghulis

Gruss Carlo
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:

Re: xb2.net Stresstest

Beitrag von Martin Altmann »

Moin Carlo,
ramses hat geschrieben:Dass Filestr() die Ursache dieses ganzen Problems ist hätte ich nie und nimmer gedacht!
dafür gibt es die Erfahrung bzw. das Bauchgefühl 8)
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
: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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: xb2.net Stresstest

Beitrag von brandelh »

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 8)
OB es aber eine dieser ist bzw. die gelinkte DLL komplett, das musst du schon selbst ausprobieren.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: xb2.net Stresstest

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: xb2.net Stresstest

Beitrag von brandelh »

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 ;-)
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: xb2.net Stresstest

Beitrag von ramses »

@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 :wink:

Viele Grüsse

Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: xb2.net Stresstest

Beitrag von brandelh »

Hi,

danke, habe ich bei File2Str() erledigt ;-)

Lokal hatte ich damit noch nie einen Lesefehler sonst wäre es mir aufgefallen ;-)
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: xb2.net Stresstest

Beitrag von ramses »

@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

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 fr keine Begrenzung
   default lExclusive to .t. // Vorgabe EXCLUSIVES Open

   if nStartPos < 1
      nStartPos := 1
   endif

   nError  := 0              // 0 steht fr 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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: xb2.net Stresstest

Beitrag von brandelh »

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 ...
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: xb2.net Stresstest

Beitrag von ramses »

@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!!!!!
Valar Morghulis

Gruss Carlo
Antworten