2011-08-18 37 views
13

Cách nào được coi là cách chính xác nhất để đánh giá mã VBA (trong trường hợp của tôi, tôi đang thử nghiệm mã trong Excel)? Có bất kỳ kỹ thuật nào khác cho mã điểm chuẩn bên cạnh 2 bên dưới không và nếu có, ưu điểm/nhược điểm của phương pháp là gì?Mã điểm chuẩn VBA

Dưới đây là 2 phương pháp phổ biến.

Đầu tiên: hẹn giờ

Sub TimerBenchmark() 

Dim benchmark As Double 
benchmark = Timer 

'Do your code here 

MsgBox Timer - benchmark 

End Sub 

Tick (mà tôi thấy lập luận như chính xác nhất):

Option Explicit 
Private Declare Function GetTickCount Lib "kernel32"() As Long 

Sub TickBenchmark() 

Dim Start As Long 
Dim Finish As Long 

Start = GetTickCount() 

'Do your code here 

Finish = GetTickCount() 
MsgBox CStr((Finish - Start)/1000) 

End Sub 

Trả lời

13

Mã sau sử dụng chức năng cửa sổ chính xác hơn Excel. Nó được lấy từ http://msdn.microsoft.com/en-us/library/aa730921.aspx#Office2007excelPerf_MakingWorkbooksCalculateFaster. Cùng một trang cũng chứa một số lời khuyên tuyệt vời về cải thiện hiệu suất trong Excel 2007.

Private Declare Function getFrequency Lib "kernel32" _ 
Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As Long 
Private Declare Function getTickCount Lib "kernel32" _ 
Alias "QueryPerformanceCounter" (cyTickCount As Currency) As Long 

Function MicroTimer() As Double 

    'Returns seconds. 

    Dim cyTicks1 As Currency 
    Static cyFrequency As Currency 
    MicroTimer = 0 

    ' Get frequency. 
    If cyFrequency = 0 Then getFrequency cyFrequency 

    ' Get ticks. 
    getTickCount cyTicks1        

    ' Seconds 
    If cyFrequency Then MicroTimer = cyTicks1/cyFrequency 
End Function 
+1

Liên kết này có màu vàng! Cảm ơn! – aevanko

+1

Tác giả của tác phẩm đó là người đóng góp thường xuyên cho Stackoverflow. Trang web của chính anh ấy có nhiều thông tin tuyệt vời hơn về Excel và hiệu năng: http://www.decisionmodels.com/ – jtolle

+1

Bạn có thể tóm tắt mã trong liên kết trong câu trả lời của bạn để tránh bị thối liên kết không? Ngoài ra, mã microtimer được cung cấp dường như không hoạt động trên Excel 64 bit. Có lựa chọn thay thế nào cho người dùng 64 bit không? – StockB

6

Thú vị câu hỏi. Đây không thực sự là câu trả lời đầy đủ nhưng điều này quá dài để được đăng dưới dạng nhận xét.
gì tôi sử dụng là loại thủ tục:

Option Explicit 
Public Time As Double 
Sub Chrono() 
If Time = 0 Then 
    Time = Now() 
Else 
    MsgBox "Total time :" & Application.Text(Now() - _ 
     Time, "mm:ss") & "." 'or whatever if not a msgbox 
    Time = 0 
End If 
End Sub 

Bằng cách đó, bạn có thể đặt mã của bạn bất cứ nơi nào bạn muốn và chỉ cần gọi nó hai lần (ví dụ):

If C_DEBUG Then Call Chrono 

Đồng bắt đầu và ở cuối phần mã bạn muốn thử nghiệm.

Tuy nhiên, tôi sẽ nói không có phương pháp "chính xác" thực sự vì nó cũng phụ thuộc vào những gì đang chạy trên máy tính của bạn. Tôi muốn nói những phương pháp này chủ yếu sẽ giúp cho biết mã nào là tốt hơn so với một phương pháp khác.

2

Bất kỳ phép đo nào sẽ ồn ào, vì vậy nếu bạn muốn chính xác, lặp lại phép đo nhiều lần và trung bình kết quả.

1

Professional Excel Development chứa một tiện ích dll PerfMon mà tôi thích, cho độ chính xác của nó, và vì nó có thể dễ dàng chèn khắp mã với một vài đơn nhấp vào

Các vấn đề liên quan