vb = langsam
FMFlash 07.05.2002 -
17:18 3524
39
Ringding
Pilot
|
zeig wieder mal den code her
|
FMFlash
tranceCoder
|
leider is das punkteergebnis der benchmarkfunktion sehr undifferenziert und die leistung is um ein drittel auf ~8 mkeys gesunken
|
Ringding
Pilot
|
Du kennst anscheinend nicht den Effekt von
Dim x, y as Long
Durch dieses Statement werden nicht etwa zwei Long-Variablen deklariert, nämlich x und y, sondern es wird x als Variant und y als Long deklariert. Wenn du in deinem Programm das x typisierst, wird's auch wieder ein Stück schneller.
|
FMFlash
tranceCoder
|
nein, ich kenn die meisten effekte nicht ist schon einige zeit her seit ich was gecodet hab
|
JC
VereinsmitgliedDisruptor
|
nein, ich kenn die meisten effekte nicht ist schon einige zeit her seit ich was gecodet hab Mhm, da gibt's noch einige Sachen, die du beschleunigen bzw. verbessern könntest. While Not quit '= False
x = x + 1
z = z + 1
If z = 100000 Then
DoEvents
z = 0
End If
Wend
Du kannst dir mit folgendem Code zB die Variable z sparen: While Not quit
x = x + 1
z = z + 1
If x Mod 100000 = 0 Then
DoEvents
End If
Wend
Allerdings, wenn du eh im Timer das DoEvents aufrufst, wär's hier nicht mehr notwendig. "While Not quit" ist im Gegensatz zu "While quit = False" doch ein bisserl schneller.  In der Hilfe findest einiges über Optimierungen.
|
Ringding
Pilot
|
Das mim mod ist um einiges langsamer als die Variante, die er gewählt hat. Divisionen brauchen nun mal ihre Zeit.
Das DoEvents ist auf jeden Fall notwendig, sonst wird das Timer Event nie bearbeitet.
|
JC
VereinsmitgliedDisruptor
|
Hmm, stimmt. Vielleicht sollt' ich doch länger schlafen... 
|
FMFlash
tranceCoder
|
In der Hilfe findest einiges über Optimierungen. hab die hilfe (msdn-cd) leider noch nicht ...
|
FMFlash
tranceCoder
|
also ich hab diese einfache counter-funktion jetzt mal in c++ mit diesem kleinen prog nachgestellt #include <iostream.h> #include <wait.h> void main(){ unsigned long counter; char input[100]; cout << "Press Return to start"; cin.getline (input,100,'\n'); counter = 0; while(counter < 200000000) counter++; returnquit(); } und statt den schlappen 5 millionen rechungen / sek die vb da produziert hat, dauerts hier grad mal 1 sek um von 0 bis 200 000 000 zu zählen! also um den faktor 20 schneller! 
Bearbeitet von FMFlash am 15.05.2002, 19:56
|
that
Hoffnungsloser Optimist
|
also ich hab diese einfache counter-funktion jetzt mal in c++ mit diesem kleinen prog nachgestellt
#include <iostream.h> #include <wait.h>
void main(){ unsigned long counter; char input[100];
cout << "Press Return to start"; cin.getline (input,100,'\n');
counter = 0;
while(counter < 200000000) counter++;
returnquit(); }
und statt den schlappen 5 millionen rechungen / sek die vb da produziert hat, dauerts hier grad mal 1 sek um von 0 bis 200 000 000 zu zählen! also um den faktor 20 schneller!  Wenn mans mit Optimierung compiliert, isses sogar noch schneller...  (der Optimizer entfernt die Schleife und die Variable "counter" komplett...)
|
FMFlash
tranceCoder
|
wie meinst, "mit optimierung compiliert" ? ansich sind die einstellungen schon auf geschwindigkeitsoptimiert ...
|
Ringding
Pilot
|
Dann optimiert der Compiler wohl nicht besonders toll. Ein richtiger Compiler entfernt die Schleife komplett, wie that gesagt hat. Sogar wenn du das counter nachher noch verwenden solltest.
|
FMFlash
tranceCoder
|
sind 200 mio additionen / sek für einen xp1600+ @1900+ denn schlecht? wenn ja, was wäre mit guter optimierung zu erreichen?
|
Ringding
Pilot
|
Erstens ist es schlecht, denn so eine Schleife kann man mit 1 oder hoechstens 2 Takten / Durchlauf machen, also kannst dir eh ausrechnen, was das dann heisst. Andererseits ist das so ein unsinniges Beispiel, das nicht wirklich was ueber den Compiler aussagt. Denn niemand braucht eine Schleife, die nix tut. Erstaunlich ist allerdings, dass die Schleife ueberhaupt ausgefuehrt wird, denn jeder halbwegs vernuenftige Compiler wuerde sie einfach weglassen, womit du unendlich viele Durchlaeufe in einer Zeiteinheit haettest.
Bearbeitet von Ringding am 16.05.2002, 19:27
|
LTD
frecher fratz
|
|