Examples and Usage Patterns - danielep71/VBA-Performance_Manager GitHub Wiki
Examples and Usage Patterns
This page collects practical usage patterns for cPerformanceManager.
It does not try to keep every historical example. Instead, it keeps the examples that still add the most value now that the project also includes a demo workbook and a regression suite.
Before you begin
All examples assume that:
cPerformanceManagerhas already been importedM_cPM_TIMEWASTERS.bashas also been imported- the project compiles successfully
- you are running on Windows
The optional examples module in the repo is:
examples/M_cPM_USAGE_EXAMPLES.bas
Retained meaningful usage examples
The most useful retained examples are:
- basic timing with the default QPC path
- formatting an already measured elapsed value
- strict-mode behavior
- non-strict fallback behavior
- basic TW suppression
- safe cleanup pattern
- structured checkpoint/report output
Example 1: basic timing (default QPC)
Option Explicit
Public Sub Example_BasicTiming_DefaultQPC()
Dim cPM As cPerformanceManager
Dim ElapsedS As Double
Set cPM = New cPerformanceManager
cPM.StartTimer 5
Range("A1:A10000").Value = 1
ElapsedS = cPM.ElapsedSeconds
Debug.Print "Elapsed seconds: " & Format$(ElapsedS, "0.000000000")
cPM.ResetEnvironment
Set cPM = Nothing
End Sub
Example 2: format an already measured elapsed value
Option Explicit
Public Sub Example_ElapsedTime_FromMeasuredSeconds()
Dim cPM As cPerformanceManager
Dim ElapsedS As Double
Dim ElapsedT As String
Set cPM = New cPerformanceManager
cPM.StartTimer 5, False
Application.Calculate
ElapsedS = cPM.ElapsedSeconds
ElapsedT = cPM.ElapsedTime(, ElapsedS)
Debug.Print "Elapsed seconds: " & Format$(ElapsedS, "0.000000000")
Debug.Print "Elapsed time : " & ElapsedT
cPM.ResetEnvironment
Set cPM = Nothing
End Sub
Example 3: strict mode
Option Explicit
Public Sub Example_StrictMode()
Dim cPM As cPerformanceManager
Dim Dummy As Double
Set cPM = New cPerformanceManager
cPM.StrictMode = True
cPM.StartTimer 5
On Error Resume Next
Dummy = cPM.ElapsedSeconds(2)
If Err.Number <> 0 Then
Debug.Print "Error number: " & Err.Number
Debug.Print "Error text : " & Err.Description
Err.Clear
End If
On Error GoTo 0
cPM.ResetEnvironment
Set cPM = Nothing
End Sub
Example 4: non-strict fallback behavior
Option Explicit
Public Sub Example_NonStrictMode()
Dim cPM As cPerformanceManager
Set cPM = New cPerformanceManager
cPM.StrictMode = False
cPM.StartTimer 5
cPM.Pause 0.03, 1
Debug.Print cPM.ElapsedSeconds(2)
cPM.ResetEnvironment
Set cPM = Nothing
End Sub
Example 5: basic time-waster suppression
Option Explicit
Public Sub Example_TimeWasters_Basic()
Dim cPM As cPerformanceManager
Set cPM = New cPerformanceManager
cPM.TW_Turn_OFF
cPM.StartTimer 5
Range("A1:A50000").Formula = "=ROW()"
Debug.Print cPM.ElapsedSeconds
cPM.TW_Turn_ON
cPM.ResetEnvironment
Set cPM = Nothing
End Sub
Example 6: safe cleanup pattern
Option Explicit
Public Sub Example_SafePattern()
Dim cPM As cPerformanceManager
On Error GoTo CleanFail
Set cPM = New cPerformanceManager
cPM.TW_Turn_OFF
cPM.StartTimer 5
Worksheets(1).UsedRange.Calculate
Debug.Print "Elapsed: " & cPM.ElapsedTime
CleanExit:
If Not cPM Is Nothing Then
cPM.ResetEnvironment
Set cPM = Nothing
End If
Exit Sub
CleanFail:
Debug.Print "Error " & Err.Number & " - " & Err.Description
Resume CleanExit
End Sub
Example 7: structured checkpoints and report export
Option Explicit
Public Sub Example_CheckpointReport()
Dim cPM As cPerformanceManager
Dim Arr As Variant
Set cPM = New cPerformanceManager
cPM.StartTimer 5
cPM.SetRunLabel "ImportWorkflow"
Range("A1:A10000").Value = 1
cPM.Checkpoint "LoadValues"
Range("B1:B10000").Formula = "=ROW()"
cPM.Checkpoint "WriteFormulas"
Application.Calculate
cPM.Checkpoint "Recalculate", "Full workbook calculation pass"
Debug.Print cPM.ReportAsText
Arr = cPM.ReportAsArray
Worksheets(1).Range("D3").Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
cPM.ResetEnvironment
Set cPM = Nothing
End Sub
Final recommendation
If you only remember one pattern from this page, make it this:
- create
cPM - call
StartTimer - do work
- read
ElapsedSecondsorElapsedTime - always call
ResetEnvironment - release the object
If you need sub-measurements inside one run, add:
- optional
SetRunLabel CheckpointReportAsArrayorReportAsText