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:

  • cPerformanceManager has already been imported
  • M_cPM_TIMEWASTERS.bas has 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:

  1. basic timing with the default QPC path
  2. formatting an already measured elapsed value
  3. strict-mode behavior
  4. non-strict fallback behavior
  5. basic TW suppression
  6. safe cleanup pattern
  7. 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:

  1. create cPM
  2. call StartTimer
  3. do work
  4. read ElapsedSeconds or ElapsedTime
  5. always call ResetEnvironment
  6. release the object

If you need sub-measurements inside one run, add:

  1. optional SetRunLabel
  2. Checkpoint
  3. ReportAsArray or ReportAsText