Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 20.09.2007, 21:50 Titel: Schneller als CHR$() |
|
|
Moin
Gibt es eine funktion die schneller als CHR$() ist?
MFG Thorben |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 20.09.2007, 21:55 Titel: |
|
|
kommt drauf an, in welchem Zusammenhang... _________________
 |
|
Nach oben |
|
 |
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 20.09.2007, 22:00 Titel: |
|
|
Code: |
FOR i = 0 TO bmih.biSizeImage
BmpStr += CHR$( str_t(i) )
NEXT i
|
Das ist zu langsam.
MFG Thorben |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 20.09.2007, 22:09 Titel: |
|
|
probier mal ob das schneller geht....
Code: |
'FOR i = 0 TO bmih.biSizeImage
' BmpStr += CHR$( str_t(i) )
'NEXT i
Dim bmihbla as Integer=100 '
Dim BmpStr as String
Dim BmpStrB as UByte Ptr
'
'
'
'
dim irgendwas as ubyte=64
BmpStrB=allocate(bmihbla+1)
for i as integer=0 to bmihbla
BmpStrB[i]=irgendwas
next i
BmpStr=*BmpStrB
DeAllocate (BmpStrB)
?BmpStr
sleep |
_________________
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 20.09.2007, 22:09 Titel: |
|
|
klar, 1+1 ist zum beispiel schneller...
CHR ist hier nicht der bremsende faktor, sondern eher die schleife... wenn du einen langen string hast und den stück für stück neu zusammenbaust, dauert das lang...versuche, so viele daten wie möglich in einem befehl zu verarbeiten. CHR kann nur ein byte verarbeiten... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 20.09.2007, 22:27 Titel: |
|
|
Jojo hat Folgendes geschrieben: | CHR kann nur ein byte verarbeiten... |
Nö
Code: | print chr(0,1,2,3,4,5,6,7,8,9,10) |
_________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 20.09.2007, 22:36 Titel: |
|
|
... was aber nichts anderes ist als CHR(0) + CHR(1) + CHR(2) <--- mehrere Befehle, NICHT einer wie z.B. in MID! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Wolfi30
Anmeldungsdatum: 17.08.2007 Beiträge: 38
|
Verfasst am: 21.09.2007, 12:33 Titel: |
|
|
Hi!
Also wenn man die Stringbefehle mit Hilfe von Assembler nachbearbeitet kann man schonmal 30-50% Leistungssteigerung rausholen , da der Compiler die Variablen im Speicher ablegt und nicht mit Register arbeitet! Das kostet viele unnötige Taktzyklen, die man sich sparen kann.
Gruß wolfi |
|
Nach oben |
|
 |
helium

Anmeldungsdatum: 10.09.2004 Beiträge: 397 Wohnort: Leverkusen
|
Verfasst am: 21.09.2007, 14:14 Titel: |
|
|
Da sieht man wieder den klassischen Fehler: Ein Problem, dass sich mit O(n) lösen lässt wird mit einem Algorithmus gelöst, der O(n²) braucht. Statt einen sinnvollen Algorithmus zu suchen wird versucht mit irgendwelchen Micoroptimierungen rumzuhantieren (schnellere Chr$-Alternative suchen), oder noch schlimmer: Es wird einfach mal wild geraten, was denn das Problem sein könnte, statt nachzugucken, was denn das Problem ist. _________________ Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit. |
|
Nach oben |
|
 |
Wolfi30
Anmeldungsdatum: 17.08.2007 Beiträge: 38
|
Verfasst am: 21.09.2007, 14:47 Titel: |
|
|
Klar zuerst muss die Performance mit dem bestmöglichen Algorithmus rausgeholt werden!
Es geht doch auch noch darum, ob was schneller geht oder nicht! Der Freebasic-Compiler optimiert halt nicht so gut! Ständiger unnötiger Overhead bei Funktionsaufrufen, wenn man sich das Assembler-File anschaut! Ich hab mir mal die String-Befehle mit Hilfe von Assembler nachgebaut und war halt überrascht von der Performance gegenüber den Vorimplementierten! Das rentiert sich bei vielen Aufrufen schon etwas weiter zu gehen! Und wer ganz hartnäckig ist benutzt Macros und Inline-Assembler!
gruß wolfi |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 21.09.2007, 15:22 Titel: |
|
|
es ist nicht sinnvoll, den stringbefehl "konkatenation" hier zu verbessern, es ist sinnvoll, ihn einfach nicht zu benutzen. Direkt den String mit der fertigen länge erstellen und danach alle zeichen auf den richtigen wert setzen statt den string jedes mal komplett neu zu erstellen und ein zeichen mehr dranzuhängen ist die einzige lösung für das problem wie helium gesagt hat, O(n) - jedes zeichen einmal setzen, statt O(n²) - jedes zeichen einmal setzen und alle bisherigen dafür einmal kopieren, den unterschied kann man einfach nicht erreichen durch optimieren von operationen wie + oder chr() _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
|