Rob*_*rtB 7 string vb6 profiling timer
由于字符串连接的性能在VB6中非常弱,我正在测试几个StringBuilder实现.为了了解它们运行了多长时间,我目前使用内置功能
Timer
Run Code Online (Sandbox Code Playgroud)
函数只给我午夜后经过的秒数.
有没有办法(我猜通过导入系统函数)获得毫秒精度的东西?
jus*_*mer 12
是的,您可以使用Win32 API:
DWORD WINAPI GetTickCount(void);
Run Code Online (Sandbox Code Playgroud)
要在VB6中导入它,请按以下方式声明:
Private Declare Function GetTickCount Lib "kernel32" () As Long
Run Code Online (Sandbox Code Playgroud)
在操作之前和之后调用它然后计算通过的时间差.
将以下代码放在Stopwatch类中:
Option Explicit
Private Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
Private Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
Private m_startTime As Currency
Private m_freq As Currency
Private m_overhead As Currency
Public Sub start()
QueryPerformanceCounter m_startTime
End Sub
Public Function ElapsedSeconds() As Double
Dim currentTime As Currency
QueryPerformanceCounter currentTime
ElapsedSeconds = (currentTime - m_startTime - m_overhead) / m_freq
End Function
Public Function ElapsedMilliseconds() As Double
ElapsedMilliseconds = ElapsedSeconds * 1000
End Function
Private Sub Class_Initialize()
QueryPerformanceFrequency m_freq
Dim ctr1 As Currency
Dim ctr2 As Currency
QueryPerformanceCounter ctr1
QueryPerformanceCounter ctr2
m_overhead = ctr2 - ctr1
End Sub
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式使用它:
Dim sw as StopWatch
sw = New StopWatch
sw.Start
' Code you want to time
Debug.Print "Code took " & sw.ElapsedMilliseconds " ms"
Run Code Online (Sandbox Code Playgroud)