Posted to microsoft.public.excel.programming
|
|
For Next loop faster with counter after Next?
Author is Matthew Harris.
RBS
"Tom Ogilvy" wrote in message
...
Who is the author.
Like you, maybe they were easily persuaded by 5 samples when 200 samples
spoke otherwise.
--
Regards,
Tom Ogilvy
"RB Smissaert" wrote in message
...
Yes, thanks, I can see now that the timings are the same.
Maybe it was different in Excel 97 and that might explain the book
statement.
RBS
"Tom Ogilvy" wrote in message
...
using Jim's code:
With: Done in .515 Seconds
With: Done in .500 Seconds
With: Done in .516 Seconds
With: Done in .515 Seconds
With: Done in .515 Seconds
With: Done in .516 Seconds
With: Done in .515 Seconds
Without: Done in .360 Seconds
Without: Done in .344 Seconds
Without: Done in .359 Seconds
Without: Done in .344 Seconds
Without: Done in .375 Seconds
Without: Done in .375 Seconds
With: Done in .359 Seconds
With: Done in .344 Seconds
With: Done in .375 Seconds
With: Done in .343 Seconds
With: Done in .344 Seconds
With: Done in .360 Seconds
Without: Done in .359 Seconds
Without: Done in .360 Seconds
Without: Done in .344 Seconds
Without: Done in .360 Seconds
Without: Done in .343 Seconds
Without: Done in .344 Seconds
With: Done in .344 Seconds
With: Done in .343 Seconds
With: Done in .360 Seconds
With: Done in .360 Seconds
With: Done in .360 Seconds
With: Done in .359 Seconds
Without: Done in .359 Seconds
Without: Done in .360 Seconds
Without: Done in .359 Seconds
Without: Done in .359 Seconds
Without: Done in .344 Seconds
Without: Done in .359 Seconds
Except for the first run "with" variables on the end of the Next
statement, there isn't a difference.
If I alternate on each run:
Without: Done in .359 Seconds
With: Done in .360 Seconds
Without: Done in .375 Seconds
With: Done in .360 Seconds
Without: Done in .344 Seconds
With: Done in .344 Seconds
Without: Done in .344 Seconds
With: Done in .344 Seconds
Without: Done in .359 Seconds
With: Done in .360 Seconds
Why the first time anomaly - could depend on what else the system is
doing. Code timing in a multitasking environment is difficult
--
Regards,
Tom Ogilvy
"RB Smissaert" wrote in message
...
I get similar figures with your exact code, which is a nuisance as I
have spent more
than an hour adding all the counter variables to a large .xla file!
Not sure now why I didn't see this difference with the previous code.
RBS
"Jim Cone" wrote in message
...
With the comment ('c and 'i) took 0.57 seconds.
Without the comment (c and i) took 0.84 seconds.
Averages of five tries for each.
--
Jim Cone
San Francisco, USA
http://www.realezsites.com/bus/primitivesoftware
Sub test()
Dim lStartTime As Long
Dim i As Long
Dim c As Long
Dim n As Long
lStartTime = timeGetTime
For i = 0 To 10000
For c = 0 To 1000
n = i + c
Next 'c
Next 'i
MsgBox "Done in " & Format$((timeGetTime - lStartTime) / 1000,
"###.000") & " Seconds"
End Sub
'-----------------
"RB Smissaert" wrote in message
...
I have read that it is equal and that it is faster with the counter
variable, but never
that is slower with the counter variable.
I just take it it is the same or the difference is unmeasurable small.
RBS
"Dave Peterson" wrote in message
...
From what I've read (I've never tested), Next without the variable is
faster.
RB Smissaert wrote:
Hang on, are you saying now that it is faster without
the variable after the Next?
RBS
"Dave Peterson" wrote in message
...
I like to see the variable in the Next statement.
But I have seen Dana DeLouis do this:
For i = 0 to 10
'code
Next 'i
It's kind of the best of both worlds???
RB Smissaert wrote:
OK, thanks, 1% faster will be worth it for me and as you say it
looks
better.
Couldn't see the speed difference, but I believe you.
RBS
"Bob Phillips" wrote in message
...
I would have expected it to be true, but not significantly so.
I did a 100 times repetitive loop of your code and found it to
be
approx
1%
faster, which I think sounds about right.
But it is much nicer code IMO irrespective.
--
HTH
Bob Phillips
(replace somewhere in email address with gmail if mailing
direct)
"RB Smissaert" wrote in
message
...
Read in the book Visual Basic for Applications in 21 days by
Matthew
Harris
(third edition) that putting the loop counter after the Next
would
make
the
loop faster:
For i = 0 to 10
'code
Next i
I can see it makes the code clearer, but I didn't think it
made it
any
faster and on simple testing I can see no difference:
Option Explicit
Private lStartTime As Long
Private Declare Function timeGetTime Lib "winmm.dll" () As
Long
Sub StartSW()
lStartTime = timeGetTime()
End Sub
Sub StopSW(Optional ByRef strMessage As Variant = "")
MsgBox "Done in " & timeGetTime() - lStartTime & " msecs",
,
strMessage
End Sub
Sub test()
Dim i As Long
Dim c As Long
Dim n As Long
StartSW
For i = 0 To 10000
For c = 0 To 1000
n = i + c
Next
Next
StopSW
End Sub
Is there any truth in this?
RBS
--
Dave Peterson
--
Dave Peterson
|