Re: [ASP ] 計算程式執行時間至毫秒

看板Visual_Basic作者 (我是保羅小小)時間5年前 (2018/09/25 13:46), 編輯推噓1(100)
留言1則, 1人參與, 5年前最新討論串2/2 (看更多)
※ 引述《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://www.ptt.cc/bbs/Visual_Basic/M.1537854392.A.0F7.html

09/29 19:42, 5年前 , 1F
問題解決了感謝大大的幫助
09/29 19:42, 1F
文章代碼(AID): #1RgSku3t (Visual_Basic)
文章代碼(AID): #1RgSku3t (Visual_Basic)