如何以毫秒为单位获得时间

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)

在操作之前和之后调用它然后计算通过的时间差.

  • GetTickCount 只有 10ms 精度,如果您需要更高的精度,您应该使用 QueryPerformanceCounter (2认同)

Pat*_*ald 9

将以下代码放在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)