Bankoptimierung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Mathe

Betreff: Bankoptimierung

BeitragMo, Jun 29, 2009 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich wollt mal fragen ob sich diese Function noch ein wenig optimieren läst da, die Geschwindigkeit im Gegensatz zu normalen Dim Variablen nicht gerade hoch ist?
Code: [AUSKLAPPEN]
Global xStringBank = CreateBank(0), xIntegerBank = CreateBank(0), xFloatBank = CreateBank(0)
Global xStringBankSize%, xIntegerBankSize%, xFloatBankSize%

Function BankString$(xString$)
   Local xStrL% = Len(xString)
   Local xStrTemp% = xStringBankSize
   ResizeBank xStringBank, xStringBankSize+xStrL
   xStringBankSize = xStringBankSize + xStrL
   For x = xStrTemp To xStringBankSize-1
      y = y + 1
      PokeByte xStringBank,x, Asc(Mid(xString,y,1))
   Next
   Return xStrTemp + "|"+xStrL
End Function

Function ReadBankString$(BankPosition$)
   Local Begrenzung% = Instr(BankPosition,"|",1)
   Local xStrStart% = Int(Mid(BankPosition,1,Begrenzung-1))
   Local xStrLeng% = Int(Mid(BankPosition,Begrenzung+1,-1))
   Local xWort$
   For x = xStrStart To (xStrStart+xStrLeng)-1
      xWort = xWort + Str(Chr(PeekByte (xStringBank,x)))
   Next
   Return xWort
End Function



Beispiel:
Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()
;Include
Include "MakeITNew.bb"

time = MilliSecs()
For x = 1 To 10000
   b$ = BankString("Der Prozessorhersteller AMD wird nach einer Meldung von TweakTown bereits in der nächsten Woche ein neues Spitzenmodell präsentieren – den Phenom II X4 965. Entsprechend der Modellnummer wird die neue CPU mit einem Takt von 3,4 GHz erscheinen.")
   ;ReadBankString(b)
Next
Endtime = MilliSecs()
Print "BankSize: " + BankSize(xStringBank) + " | BankTime: " + (endtime-time)
time = MilliSecs()
Dim St$(10000)
For x = 1 To 10000
   St(x) = "Der Prozessorhersteller AMD wird nach einer Meldung von TweakTown bereits in der nächsten Woche ein neues Spitzenmodell präsentieren – den Phenom II X4 965. Entsprechend der Modellnummer wird die neue CPU mit einem Takt von 3,4 GHz erscheinen."
Next
endtime = MilliSecs()
Print "DimTime: " + (endtime-time)
Delay 100
Print "Fertigstellen. Bitte eine Taste drücken"
Flip
WaitKey
Windoof nein DANKE => ArchLinux Wink

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jun 29, 2009 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst es optimieren indem du ein Type erstellst welches nur ein einziges String-Field hat und dessen ID dann in einer Bank (falls unbedingt notwendig) speicherst. Das Handle einer ID bekommst du über Handle. Ansonsten sind Integerzugriffe etwas schneller als einzelne Bytezugriffe.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Mathe

BeitragMo, Jun 29, 2009 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmmm.... eigentlich wollt ich ja ein Type Array erweitern, damit in einer Array auch Float, Ints und StringVariablen vorkommen können, ist das der Aufwand eigentlich wert?

Edit:

@hectic
Dank deinen Vorschlag braucht meine Bank-Function nur noch 37ms bei 10.000 Einträgen ein DimFeld mit 10.000 Einträgen brauch 14ms.
Windoof nein DANKE => ArchLinux Wink

hazumu-kun

BeitragMi, Jul 01, 2009 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Mathe hat Folgendes geschrieben:
hmmmm.... eigentlich wollt ich ja ein Type Array erweitern, damit in einer Array auch Float, Ints und StringVariablen vorkommen können, ist das der Aufwand eigentlich wert?
...


Ist das den Aufwand wert?
Frag nicht uns. Wofür brauchst du diese 'Speicher-Management'-Engine eigentlich??
Wenndu keine wikrliche Verwendung dafür hast würd ich nicht soviel Energie reinstecken.

Gruß VikenEmesh
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group