Каков наилучший способ синхронизации функций / измерения производительности в VB6? - PullRequest
4 голосов
/ 20 апреля 2009

Если я просто хочу быстро измерить, сколько времени занимает определенная функция, что я могу позвонить, чтобы получить точное время? Учитывая, что функции синхронизации VB6 не обладают высокой точностью, есть ли функции Windows API, которые вы вызываете вместо этого?

Какими еще способами вы измеряете производительность приложения? Есть ли сторонние инструменты, которые вы рекомендуете?

Ответы [ 3 ]

4 голосов
/ 20 апреля 2009

Я использую высокопроизводительные мультимедийные таймеры. Вот фрагмент отладки библиотека профилирования.

Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Declare Function timeBeginPeriod Lib "winmm.dll" (ByVal uPeriod As Long) As Long
Private Declare Function timeEndPeriod Lib "winmm.dll" (ByVal uPeriod As Long) As Long

Private mlTimeStarted As Long


Public Sub StartTimer(Optional lPeriod As Long = 1)
10        Call timeBeginPeriod(lPeriod)
20        mlTimeStarted = timeGetTime()
End Sub

Public Function GetTimeElapsed() As Long
10        GetTimeElapsed = timeGetTime() - mlTimeStarted
End Function

Public Sub EndTimer(Optional lPeriod As Long = 1)
    Debug.Assert lPeriod < 10
10        Call timeEndPeriod(lPeriod)
20        mlTimeStarted = 0
End Sub

Public Sub DebugProfileStop()
10        Call EndTimer
End Sub

Public Sub DebugProfileReset()

10        If mlTimeStarted > 0 Then
20            EndTimer
30        End If
40        Call StartTimer

End Sub

Public Sub DebugProfile(sText As String)
10        Debug.Print "Debug " & sText & " : " & CStr(GetTimeElapsed)
End Sub

Использование:

   DebugProfileReset
   DebugProfile("Before Loop")
   For index = 0 to 10000
       DebugProfile("Before Call To Foo")
       Foo
       DebugProfile("Before Call To Bar")
       Bar
       DebugProfile("Before Call To Baz")
       Baz
   Next index
   DebugProfile("After Loop")
   DebugProfileStop
4 голосов
/ 20 апреля 2009

Обычно я использую счетчики производительности Windows hihg. Проверьте QueryPerformanceCounter и QueryPerfomanceFrequency

Как правило, у меня есть простой класс, конструктор и деструктор которого вызывают QueryPerformanceCounter, а затем добавляют разницу к промежуточной сумме.

Для инструментов проверьте devpartner . Хотя это работает хорошо, использование значительных частей кода делает мое приложение невыносимо медленным. Я обычно нахожу, что хочу получить точную синхронизацию только для одной или двух функций, поэтому я часто заканчиваю тем, что использую функции счетчика производительности, а не devpartner.

1 голос
/ 20 апреля 2009

VB Watch - еще один инструмент, который вы можете рассмотреть.

Эти вещи наиболее универсальны, когда вы можете изолировать подозрительные области вашего кода. Многие инструменты этого типа позволяют ограничить охват инструментов кода модулями или отдельными процедурами или ограничить мониторинг процедурой, а не уровнем операторов. Это может помочь уменьшить часть боли, связанной с построчным инструментарием всей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...