Code: Alles auswählen
proc main()
local x, nStart, nEnde
local aSuchRecNoAZ := {}, aSuchRecNoKEY := {} // Suchbegriffe nach physikalischer Reihenfolge
local aSuchIndexAZ := {}, aSuchIndexKEY := {} // Suchbegriffe nach logischer Reihenfolge
cls
set alternate to TestNTX.TXT
set alternate on
delete file test_AZ.ntx
delete file test_key.ntx
?
? "Testrechner Athlon 64 3000+, 2GB-Ram, 160 GB IBM 7200 Festplatte,"
? " Win2000 SP4 mit NTFS"
?
? str(seconds(),10,3),"TEST.DBF öffnen - exclusive für indizieren"
use test.dbf exclusive
if neterr()
? "**** NETERR() ****"
quit
endif
? str(seconds(),10,3),"20 Suchbegriffe: Recno() 1001, 2001 ... Lastrec()-1000 ..."
go top
for x := 1 to 10
skip 1000
aadd(aSuchRecNoAZ,field->AZ)
aadd(aSuchRecNoKEY,field->KEY)
next
go bottom
for x := 1 to 10
skip -1000
aadd(aSuchRecNoAZ,field->AZ)
aadd(aSuchRecNoKEY,field->KEY)
next
? str(seconds(),10,3),"LastRec():",ntrim(lastrec()),"RecSize()",ntrim(RecSize()),;
"Byte -> Dateigröße:",transform( (RecSize()*LastRec()+Header()+1),"999,999,999"),"Byte"
? str(seconds(),10,3),"Datei indizieren auf Char-Feld 10 Stellen, mehrere Sätze mit gleichem Inhalt"
index on key to test_Key
? str(seconds(),10,3),"FERTIG"
? str(seconds(),10,3),"Datei indizieren auf Char-Feld 20 Stellen, jeder Satz hat anderen Inhalt"
index on AZ to test_AZ
? str(seconds(),10,3),"FERTIG"
? str(seconds(),10,3),"20 Suchbegriffe: nach logischer Reihenfolge je 1000 Schritte von Anfang bzw. Ende"
// AZ
set index to test_AZ
go top
for x := 1 to 10
skip 1000
aadd(aSuchIndexAZ,field->AZ)
next
go bottom
for x := 1 to 10
skip -1000
aadd(aSuchIndexAZ,field->AZ)
next
// KEY
set index to test_key
go top
for x := 1 to 10
skip 1000
aadd(aSuchIndexKEY,field->KEY)
next
go bottom
for x := 1 to 10
skip -1000
aadd(aSuchIndexKEY,field->KEY)
next
? str(seconds(),10,3),"Suchbegriffe sind gefunden, nun CLOSE ALL um Puffer zu leeren"
close all
?
? str(seconds(),10,3),"TEST.DBF öffnen shared, das ist ja normal"
use test.dbf shared
if neterr()
? "**** NETERR() ****"
quit
endif
? str(seconds(),10,3),"Indexe öffnen ..."
set index to test_AZ, test_key
? str(seconds(),10,3),"FERTIG"
?
? "Suche nach ... AZ - Suchbegriff aus RecNo()"
set index to test_AZ
go top
for x := 1 to 10
? str(x,3)+". "
nStart := seconds() // direkt
dbseek(aSuchRecNoAZ[x])
nEnde := seconds() // messen
if found()
?? "OK - Dauer: "
else
?? "OK - Dauer: "
endif
?? str(nEnde-nStart,6,3),"Sekunden"
next
?
? "Suche nach ... KEY - Suchbegriff aus RecNo()"
set index to test_KEY
go top
for x := 1 to 10
? str(x,3)+". "
nStart := seconds() // direkt
dbseek(aSuchRecNoKEY[x])
nEnde := seconds() // messen
if found()
?? "OK - Dauer: "
else
?? "OK - Dauer: "
endif
?? str(nEnde-nStart,6,3),"Sekunden"
next
?
? "Suche nach ... AZ - Suchbegriff aus logischer Reihenfolge"
set index to test_AZ
go top
for x := 1 to 10
? str(x,3)+". "
nStart := seconds() // direkt
dbseek(aSuchIndexAZ[x])
nEnde := seconds() // messen
if found()
?? "OK - Dauer: "
else
?? "OK - Dauer: "
endif
?? str(nEnde-nStart,6,3),"Sekunden"
next
?
? "Suche nach ... KEY - Suchbegriff aus logischer Reihenfolge"
set index to test_KEY
go top
for x := 1 to 10
? str(x,3)+". "
nStart := seconds() // direkt
dbseek(aSuchIndexKEY[x])
nEnde := seconds() // messen
if found()
?? "OK - Dauer: "
else
?? "OK - Dauer: "
endif
?? str(nEnde-nStart,6,3),"Sekunden"
next
return
function ntrim(nWert)
return alltrim(str(nWert))