作者paul60209 (我是保羅小小)
標題Re: [ASP ] 計算程式執行時間至毫秒
時間Tue Sep 25 13:46:30 2018
※ 引述《marcopolo1 (TSRDJ)》之銘言:
: 各位大大好
: 小弟剛踏入vb的世界,目前想知道程式中某一個段落的執行時間,做法如下
: dtstartime = Now() '將目前時間以dastartime儲存
: 'do test 想量測時間的主要程式
: FormatDataTime(Now()-dtstartime,3) '利用目前的時間減去dtstartime得到時間差
: 但是我目前的作法只能取時間到秒的單位,請問各位大大什麼方法可以設定時間的格式嗎?
如果要到毫秒(Milliseconds)你用VBA裡面的Now是做不到的,
比較複雜的方式只能透過window的GetSystemTime來做了,
方法如下,總共包含7段程式,請全部複製進去你的編譯器裡面,
Option Explicit
Private Declare PtrSafe Sub GetSystemTime Lib "kernel32" (lpSystemTime As
SYSTEMTIME)
Private Type SYSTEMTIME
myYear As Integer
myMonth As Integer
myDayOfWeek As Integer
myDay As Integer
myHour As Integer
myMinute As Integer
mySecond As Integer
myMilliseconds As Integer
End Type
Public ST As SYSTEMTIME
Public ET As SYSTEMTIME
'''''''''''''''''''''''''''''''''''''
Sub GetStartTime()
GetSystemTime ST
End Sub
'''''''''''''''''''''''''''''''''''''
Sub GetEndTime()
GetSystemTime ET
End Sub
'''''''''''''''''''''''''''''''''''''
Function SystemTimeDiff(ST As SYSTEMTIME, ET As SYSTEMTIME)
Dim msec1 As Integer: Dim msec2 As Integer
Dim timetaken As Date
msec1 = Val(Left(Split(FormatSystemTime(ST) & ".", ".")(1) & "000", 3))
msec2 = Val(Left(Split(FormatSystemTime(ET) & ".", ".")(1) & "000", 3))
If msec2 < msec1 Then msec2 = msec2 + 1000
timetaken = CDate(Split(FormatSystemTime(ET) & ".", ".")(0)) -
CDate(Split(FormatSystemTime(ST), ".")(0))
SystemTimeDiff = (Format(Hour(timetaken), "00") & ":" &
Format(Minute(timetaken), "00") & ":" & Format(Second(timetaken), "00")) & _
"." & Format(msec2 - msec1, "000")
End Function
''''''''''''''''''''''''''''''''''''''''''
Function FormatSystemTime(ST As SYSTEMTIME) As String
With ST
FormatSystemTime = Format(.myHour, "00") & ":" & Format(.myMinute, "00")
& ":" & _
Format(.mySecond, "00") & "." & Format(.myMilliseconds, "000")
End With
End Function
'''''''''''''''''''''''''''''''''''''''''
Sub MyTimeDiff()
MsgBox SystemTimeDiff(ST, ET), vbInformation, "巨集進行時間"
End Sub
''''''''''''''''''''''''''''''''''''''''
Sub MySub()
Dim i As Integer
Call GetStartTime
'此處更改為你原本的程式
For i = 1 To 1000
Cells(i, "A") = i
Next
'
Call GetEndTime
Call MyTimeDiff
End Sub
最後MySub的部分就是你自己原本寫的程式碼
在你開始計時的地方加入Call GetStartTime,
然後結束的地方加入Call GetEndTime,
最後再加上Call MyTimeDiff去計算兩個時間的差異
他就會自動幫你算出來了,
要注意的是裡面抓到的系統時間是抓標準時間,
而非台灣時間,所以你如果要看開始與結束時間,
要自己加上8小時,也可於程式碼裡面調整
至於7個程式內容是什麼,有點複雜就不多做解釋了,
如果真的有興趣,可以在站內信我討論~
希望這樣有幫助到你~~~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.169.229.10
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Visual_Basic/M.1537854392.A.0F7.html
1F:推 marcopolo1: 問題解決了感謝大大的幫助 09/29 19:42