[AccessD] Article for DBA newsletter / website

John W. Colby jwcolby at colbyconsulting.com
Wed Feb 9 23:30:49 CST 2005


I am writing an article for DBA's new website content (and maybe a
newsletter, not sure exactly).

May I suggest that anyone out there interested in being published do the
same.  Contact Jim Lawrence if you would like to contribute code or
articles.

At any rate, as you might imagine I am going to do a class demo, a timer.
If you've been around the group long you have seen the class.  It is a
variant of old ADH code and looks like:

Option Compare Database
Option Explicit
'
'This class is so simple that I will not use the normal class framework
interface.
'This class never loads children, never does anything that should cause
problems
'so the framework interface is generally unneeded.
'
Private Declare Function apiGetTime Lib "winmm.dll" _
                                    Alias "timeGetTime" () As Long

Private lngStartTime As Long

'THESE FUNCTIONS / SUBS ARE USED TO IMPLEMENT CLASS FUNCTIONALITY
'*+Class function / sub declaration
Function EndTimer()
    EndTimer = apiGetTime() - lngStartTime
End Function

Sub StartTimer()
    lngStartTime = apiGetTime()
End Sub
'*-Class function / sub declaration

This class allows me to create instances on demand to time things.  One of
the things I timed awhile back is how long it takes to do a bunch of
different vb code things.  For example:

How long to call a function, passing no parameters.
How long to call a function passing a parameter.
How long to call a function returning a value from the function.
How long to do a left$()

Etc.

A couple of examples of these tests follow:

Function TestLeftStr()
Dim lclsTimer As clsTimer
Dim lngCnt As Long
Dim str As String

    Set lclsTimer = New clsTimer
    lclsTimer.StartTimer
    For lngCnt = 1 To 100000
        str =
Left$("johncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohnco
lbyjohncolby", 10)
    Next lngCnt
    Debug.Print lclsTimer.EndTimer
End Function

Function RetStr() As String
    RetStr =
"johncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohncolbyjoh
ncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohncol
byjohncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohncolbyjohncolby"
End Function
Function PassStr()

End Function
Function TestPassParam()
Dim lclsTimer As clsTimer
Dim lngCnt As Long
Dim str As String
Dim str2 As String

    Set lclsTimer = New clsTimer
    str = "johncolby"
    str2 = "marycolby"
    lclsTimer.StartTimer
    For lngCnt = 1 To 100000
        PassStr
    Next lngCnt
    Debug.Print lclsTimer.EndTimer
End Function
Function TestRetParam()
Dim lclsTimer As clsTimer
Dim lngCnt As Long
Dim str As String

    Set lclsTimer = New clsTimer
    lclsTimer.StartTimer
    For lngCnt = 1 To 100000
        str = RetStr()
    Next lngCnt
    Debug.Print lclsTimer.EndTimer
End Function

Etc. Etc.

I thought for my first article I would build up a little database where we
(as a group) could request timings of specific functionality that we are
interested in seeing run.  I will be building a table and adding code to
store the timing results to the table.  Anyone interested in having
something timed and showing the results to the group can email me working
code and I will include it in the project.  As you can see you can do your
own timing on your own systems, however if you want to compare apples to
apples the timing has to be done on a single system.

I will place the code in modules and run the timings, storing the results to
a table and upload the database to the new dba website where my article will
be posted.

The timing class is just the beginning of course.  It is rather the perfect
"introductory" class to demonstrate encapsulation of data and functionality,
instancing etc.  I use this class all the time to time execution of queries,
code etc.  

Anyway, if you would like to see some thing timed and included in a database
of "how long it takes to..." get me working code (not TOO complex please)
and I will put it in the demo database with the code executed (timed) and
the timings stored in a table.

Also think about what you could contribute to the web site.

Thanks,

John W. Colby
www.ColbyConsulting.com 

Contribute your unused CPU cycles to a good cause:
http://folding.stanford.edu/





More information about the AccessD mailing list