Seite 2 von 2

Verfasst: 30.08.2005 15:50
von ts-soft
Okay, probieren wir es mal:

Code: Alles auswählen

Procedure.s GetMonthName(nValue.l)
  If nValue > 0
    ProcedureReturn StringField("Januar,Februar,März,April,Mai,Juni,July,August,September,Oktober,November,Dezember", nValue, ",")
  EndIf
EndProcedure

Procedure.s SelectMonthName(nValue.l)
  Protected Result.s
  Select nValue
    Case  1 : Result = "Januar" 
    Case  2 : Result = "Februar" 
    Case  3 : Result = "März" 
    Case  4 : Result = "April" 
    Case  5 : Result = "Mai" 
    Case  6 : Result = "Juni" 
    Case  7 : Result = "July" 
    Case  8 : Result = "August" 
    Case  9 : Result = "September" 
    Case 10 : Result = "Oktober" 
    Case 11 : Result = "November" 
    Case 12 : Result = "Dezember" 
  EndSelect
  ProcedureReturn Result
EndProcedure

Procedure.s IfMonthName(nValue.l)
  Protected Result.s
  If nValue     =  1 : Result = "Januar" 
  ElseIf nValue =  2 : Result = "Februar"
  ElseIf nValue =  3 : Result = "März"
  ElseIf nValue =  4 : Result = "April" 
  ElseIf nValue =  5 : Result = "Mai"
  ElseIf nValue =  6 : Result = "Juni" 
  ElseIf nValue =  7 : Result = "July"
  ElseIf nValue =  8 : Result = "August"
  ElseIf nValue =  9 : Result = "September"
  ElseIf nValue = 10 : Result = "Oktober"
  ElseIf nValue = 11 : Result = "November" 
  ElseIf nValue = 12 : Result = "Dezember"
  EndIf
  ProcedureReturn Result
EndProcedure

; Test 1
Start = ElapsedMilliseconds()
For I = 1 To 1000000
  For J = 1 To 12
    GetMonthName(J)
  Next
Next
MessageRequester("GetMonthName", Str(ElapsedMilliseconds() - Start))

; Test 2
Start = ElapsedMilliseconds()
For I = 1 To 1000000
  For J = 1 To 12
    SelectMonthName(J)
  Next
Next
MessageRequester("SelectMonthName", Str(ElapsedMilliseconds() - Start))

; Test 3
Start = ElapsedMilliseconds()
For I = 1 To 1000000
  For J = 1 To 12
    IfMonthName(J)
  Next
Next
MessageRequester("IfMonthName", Str(ElapsedMilliseconds() - Start))
Ich hoffe der Test ist für alle 3 Funktionen gleichberechtigt. Die schönste (die erste) ist Wohl am langsamsten, aber weniger zu tippen :D

Verfasst: 26.10.2005 01:19
von zigapeda
Hoffe ich hab nix falsch programmiert aber bei mir ist break schneller:

Code: Alles auswählen

bla.s = "quit"

For a = 0 To 20

  T1 = ElapsedMilliseconds()
  For b = 0 To 1000000
    Repeat
      If bla = "quit"
        quit = 1
      EndIf
    Until quit=1
    quit = 0
  Next b
  T2 = ElapsedMilliseconds()
  
  ergebnis$ + Str(T2 - T1) + " / "
  
  T1 = ElapsedMilliseconds()
  For b = 0 To 1000000
    Repeat
      If bla = "quit"
        Break
      EndIf
    ForEver
    quit = 0
  Next
  T2 = ElapsedMilliseconds()
  
  ergebnis$ + Str(T2 - T1) + #CRLF$
  
Next a

MessageRequester("",ergebnis$)

Verfasst: 27.10.2005 18:49
von Christian H
ts-soft hat geschrieben:Okay, probieren wir es mal:

Code: Alles auswählen

Procedure.s GetMonthName(nValue.l)
  If nValue > 0
    ProcedureReturn StringField("Januar,Februar,März,April,Mai,Juni,July,August,September,Oktober,November,Dezember", nValue, ",")
  EndIf
EndProcedure
...
Die StringFunktionen von PB sind ja nicht gerade berauchend schnell. :(

Ich habe aber noch eine schnelle Möglichkeit für das "MonthName" Problem.

Code: Alles auswählen



  Dim MonthArray.s(11)
    MonthArray(0) = "Januar"
    MonthArray(1) = "Februar"
    MonthArray(2) = "März"
    MonthArray(3)= "April"
    MonthArray(4)= "Mai"
    MonthArray(5)= "Juni"
    MonthArray(6)= "July"
    MonthArray(7)= "August"
    MonthArray(8)= "September"
    MonthArray(9)= "Oktober"
    MonthArray(10)= "November"
    MonthArray(11)= "Dezember"

Procedure.s GetFormMonthArray(nValue.l)
  
    ProcedureReturn  MonthArray(nValue)
  
EndProcedure


; Test 4
Start = ElapsedMilliseconds()
For I = 1 To 1000000
  For J = 0 To 11
    GetFormMonthArray(J)
  Next
Next
MessageRequester("GetFormMonthArray", Str(ElapsedMilliseconds() - Start)) 
Gruß Christian

Verfasst: 06.05.2006 11:27
von manunidi
@Christin H:

Deine Version ist bei mir ca 4 mal so schnell :) *FREUDE*

Verfasst: 06.05.2006 18:20
von mk-soft
@ts-soft
Die erste Methode ist bei mir auch die schnellste. Mit und Ohne Debugger.

PB4, Celeron 1.8MHz

FF :wink: :wink:

Verfasst: 28.09.2006 17:52
von AND51
Du Schwindler! :mrgreen:

PB 4 läuft doch gar nicht auf einem
> Celeron
mit nur
> 1.8MHz

Verfasst: 28.09.2006 18:27
von mk-soft
@AND51,

Mit einen Pot Kaffee und eine Stange Zigaretten schon. :mrgreen:

Ok, 1.8GHz

FF :wink: