Deutsch English
Blog
Home
Über tdbengine
Newsletter
Download
Helpware
Chat
Dokumentation
Einführungskurs
Befehlsreferenz
HOWTO - Wie kann ich...?
Schnipsel
Projekte
Links
Benchmarks
Bug Reporting
Supportanfrage
 
Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
Wie kann ich die performance meiner Programme weiter steigern?
Jedes Programm ist nur so gut wie der, der es bedient. Diese pauschall Aussage gilt sicherlich auch für tdbengine. Also gilt für "gut" auch ".
Es gibt Kniffe mit deren Hilfe Sie auch das letzte Quäntchenpinch Geschwindigkeit Ihren Programmen abverlangen können
Beachten Sie aber, dass es oftmals Sinn macht einen Kompromiss zwischen Geschwindigkeit und Stabilität zu finden. Was nützt die schnellste Datenbank wenn die Einträge regelmäßig verschwinden?

Mit einer gechickten Kombination von der hier aufgelisteten Kniffe können Sie deutlich mehr aus Ihren Anwendungen rausholen.

1.  Laufzeitschalter "No Break"setzen.
Die tdbengine überprüft default-mässig mehrmals pro Sekunde, ob sich im gleichen Verzeichnis, in dem das gerade ausgeführte .prg liegt, auch eine Datei namens "abort" befindet. Findet sie eine solche Datei, so bricht sie augenblicklich die Ausführung des Moduls ab und versucht die Abort-Datei zu löschen.
Das ist sehr praktisch, wenn Sie als Entwickler/Systemadministrator nur begrenzten Zugang zum Server haben, auf dem die tdbengine läuft. Somit können Sie ganz einfach per FTP eine endloslaufende tdbengine "abschiessen". Sie brauchen nur eine leere Textdatei mit dem Namen "abort" ins Verzeichnis des Moduls spielen und alsbald beendet sich der laufende Prozess.
Wenn Sie jedoch sowieso Shell- oder gar Root-Zugang zum ausführenden Server haben, dann ist diese Art der Programmterminierung von aussen gar nicht von Nöten.

Setzen Sie daher einfach den Laufzeitschalter nb auf 1, sobald Ihre Main-Procedure startet.

PROCEDURE Main
  SetPara("nb 1")
  ... //hier gehts los
ENDPROC

Je nach Programm kann das einen Performance-Gewinn von bis zu 50 Prozent einbringen. (Bei einer Schleife, die nichts anderes machte, als die Zählvariable zu inkrementieren waren es in meinen Tests ganze 60% mehr Performance)

Hier der Quellcode mit dem ich getestet und gemessen habe:

PROCEDURE Main
    SetPara("nb 1")
    CGICloseBuffer
    VAR x,y : INTEGER = 0
    VAR n    : REAL = Now
    WHILE x++ < 100 DO
        y := 0
        WHILE y++ < 300000 DO END
    END
    CGIWriteLn("t = "+TimeStr(Now - n,3))
ENDPROC

Hinweis: Wenn Sie sich definitiv sicher sind, dass Sie völlig auf die abort-Dateien verzichten können, dann dürfen Sie die Abfrage danach auch direkt in Ihrer tdbengine.ini abschalten. Setzen Sie dazu einfach unter [globals] oder [ihrprg] nobreak=0 Das erspart es Ihnen, jedesmal händisch Sorge tragen zu müssen, dass der Schalter umgelegt wird.

2. Schleifen optimieren - in der Kürze liegt die Würze
Schreiben Sie zum Inkrementieren von Laufvariablen X++ bzw. X-- anstatt X := X +1 bzw. X := X -1 - das bringt enorme Performance.
Packen Sie ausserdem soviel wie möglich in eine Anweisung.

Diese Schleife soll z.B. die Anzahl der Einträge bis zum ersten leeren (hier =0) Element des Arrays aLfd ermitteln. Dazu wird jedes Element mit 0 verglichen. Liefert der Vergleich WAHR zurück, dann wird die Schleife beendet. Die Laufvariable X enthält die Anzahl der belegten Elemente.

x:=0
REPEAT
UNTIL ~aLfd[x++]

ist spürbar schneller als

x:=0
REPEAT
    x := x +1
UNTIL aLfd[x] = 0

Die Tilde ~ ist eine Kurzschreibform von NOT, negiert also das Ergebnis des darauffolgenden Ausdrucks.

Siehe auch:





tdbengine Anwendungen im Web:

Open-Source Web CMS


Open-Source Bug-Tracking


Free wiki hosting

Open-Source Wiki-System

Kostenloses Foren-Hosting

Diät mit tdbengine 8-)

tdbengine chat
irc.tdbengine.org
#tdbengine

   Copyright © 2003-2004 tdb Software Service GmbH
   Alle rechte vorbehalten. / All rights reserved
   Letzte Änderung: 04.05.2004
{Fehler für :execmacro{execmacro="sessionspy"}


ranking-charts.de

Programmers Heaven - Where programmers go!