Herbers Excel-Forum - das Archiv

Berechnungsdauer einer UDF messen

Bild

Betrifft: Berechnungsdauer einer UDF messen
von: {Boris}

Geschrieben am: 02.01.2008 20:58:39

Hi Leute,
wie kann man die Berechnungsdauer einer UDF messen, z.B. für folgendes Dummy-Beispiel:

Function Dummy() As Long
Dim x As Long
For x = 1 To 200000000
Next
Dummy = 1
End Function


Tabelle1

 A
11

Formeln der Tabelle
ZelleFormel
A1=dummy()


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Wie lange hat der Rechner nun gerödelt?
Grüße Boris

Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: K.Rola
Geschrieben am: 02.01.2008 21:08:16
Hallo,
glückliches Jahr 2008, Liebes.

Function Dummy() As Long
Dim x As Long, Start As Long
Start = Timer
For x = 1 To 200000000
Next
Dummy = 1
MsgBox Timer - Start
End Function


Gruß K.Rola

Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: {Boris}
Geschrieben am: 02.01.2008 21:13:02
Hi Hasi,
ebenfalls ein frohes Neues!
Bei diesem Dummy war das gut messbar - verkürze ich die Schleife auf 200, dann kommt ein negatives(?!) Ergebnis raus. Wie geht denn das zusammen?
G+K
Boris

Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: K.Rola

Geschrieben am: 02.01.2008 21:37:50
Hallo,
Private Declare

Function GetTickCount& Lib "Kernel32" ()

Function Dummy() As Long
Dim x As Long, tc As Long
tc = GetTickCount
For x = 1 To 200000000
Next
Dummy = 1
MsgBox GetTickCount - tc
End Function


Wenn du es noch geanuer brauchst, steigt der Aufwand gleich mächtig, ist aber machbar.
Gruß K.Rola

Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: {Boris}

Geschrieben am: 02.01.2008 21:47:20
Liebes,
nochmals besten Dank!
Wenn du es noch geanuer brauchst, steigt der Aufwand gleich mächtig, ist aber machbar.
An Deinen pfiffigen Lösungen bin ich natürlich immer interessiert. :-)
Das mach ich aber mal von Deiner Zeit und Lust, ganz nach Deinem Ausspruch
Wenn man gerade nichts Besseres vorhat...
abhängig ;-)
Grüße Boris

Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: Hajo_Zi

Geschrieben am: 02.01.2008 21:08:40
Hallo Boris,
in Sekunden?

Option Explicit
Function Dummy() As Date
Dim DaZeit As Date
DaZeit = Time
Dim x As Long
For x = 1 To 200000000
Next
Dummy = Time - DaZeit
End Function



Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: {Boris}
Geschrieben am: 02.01.2008 21:16:10
Hi Hajo,
danke. In diesem Beispiel kann man sicherlich Sekunden messen. Es sollte aber auch im Bruchteilsbereich funktionieren.
Grüße Boris

Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: MichaV

Geschrieben am: 02.01.2008 21:18:07
Hallo Boris,


Option Explicit
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private lngStartTime As Long
Public Sub StartTimer()
  lngStartTime = timeGetTime
End Sub
Public Function EndTimer() As Long
  EndTimer = timeGetTime - lngStartTime
End Function
Function Dummy() As Long
StartTimer
Dim x As Long
For x = 1 To 200000
Next
Dummy = 1
MsgBox EndTimer & " ms"
End Function

     Code eingefügt mit Syntaxhighlighter 4.6

Gruß- Micha
PS: Rückmeldung wäre nett.
PPS:
http://www.online-excel.de/fom/fo_read.php?f=1&bzh=10776&h=10770

Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: {Boris}
Geschrieben am: 02.01.2008 21:28:59
Hi Micha,
besten Dank. Bei kleiner Schleife zeigt´s zwar immer Null - aber ich brauch´s auch nur für etwas umfangreichere UDFs. Und scheint Dein Vorschlag sehr gut zu sein!
Grüße Boris

Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: MichaV

Geschrieben am: 02.01.2008 21:36:29
Hallo Boris,
zu K.Rolas Variante (ich wollte mich oben nicht in Eurer kuscheliges Gespräch einmischen): da kommt die Ungenauigkeit bei der Zuweisung zum Long- Datentyp zum Vorschein. Versuch(t) mal


Option Explicit
Function Dummy() As Long
Dim x As Long, Start As Long, Ende As Long
Start = Timer
For x = 1 To 200
Next
Dummy = 1
Ende = Timer
MsgBox Ende - Start
End Function

     Code eingefügt mit Syntaxhighlighter 4.6

..allerdings gibts hier um Mitternacht Probleme, weil Timer dann auf 0 zurückspringt. Bei der API- Variante gibts nur alle 48 Tage Probleme.
Gruß- Micha

Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: {Boris}
Geschrieben am: 02.01.2008 21:43:44
Hi Micha,
nochmals danke. Aber hier hast Du - glaube ich - wahrscheinlich falsch reinkopiert. Die Variablen sollten wohl alle vom Typ Double sein ;-). Hab´s zumindest so getestet - und funktioniert.
Grüße Boris

Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: MichaV
Geschrieben am: 02.01.2008 21:57:09
Hallo Boris,
die Timer- Funktionen geben Long zurück. Warum soll ich dann alles als Double deklarieren?
Gruß- Micha

Bild

Betrifft: Dann hab ich Dich falsch verstanden...
von: {Boris}
Geschrieben am: 02.01.2008 22:07:31
Hi Micha,
...da kommt die Ungenauigkeit bei der Zuweisung zum Long- Datentyp zum Vorschein...
Sei´s drum - et lüppt!
Grüße Boris

Bild

Betrifft: AW: Dann hab ich Dich falsch verstanden...
von: MichaV

Geschrieben am: 02.01.2008 22:15:56
Hallo,
ich hab mich auch gewundert. Timer gibt den Daten vom Typ Single zurück, und das wird in diesem Beispielcode in eine Long- Variable umgewandelt.
Es hätte also gereicht:
...
Dim x As Long, Start As Single
Start = Timer
...
Hatte ich nicht gesehen, und nun wieder was gelernt.
So, und nun wirklich Schluß.
Gruß- Micha

Bild

Betrifft: AW: Berechnungsdauer einer UDF messen
von: Uduuh

Geschrieben am: 02.01.2008 22:13:49
Hallo Micha,
aus der Hilfe:

Timer-Funktion
Gibt einen Wert vom Typ Single zurück, der die Anzahl der seit Mitternacht vergangenen Sekunden  _
angibt.
Syntax
Timer
Bemerkungen
Unter Microsoft Windows gibt die Timer-Funktion Bruchteile einer Sekunde zurück. Auf dem Macintosh ist die Einheit eine Sekunde.


Gruß aus’m Pott
Udo

Bild

Betrifft:
von: MichaV

Geschrieben am: 02.01.2008 22:17:25
Hallo Udo,
ja danke :o) Irgendwie hatte ich das auch gerade in der Hilfe gelesen...
Gruß- Micha

 Bild