2011-08-18 18 views
13

वीबीए कोड बेंचमार्क करने का सबसे सटीक तरीका माना जाता है (मेरे मामले में, मैं एक्सेल में कोड का परीक्षण कर रहा हूं)? क्या नीचे दिए गए 2 के अलावा बेंचमार्किंग कोड के लिए कोई और तकनीक है, और यदि हां, तो विधि के पेशेवर/विपक्ष क्या हैं?बेंचमार्किंग वीबीए कोड

यहां 2 लोकप्रिय तरीके हैं।

पहले: टाइमर

Sub TimerBenchmark() 

Dim benchmark As Double 
benchmark = Timer 

'Do your code here 

MsgBox Timer - benchmark 

End Sub 

और टिक (जो मैं सबसे सटीक रूप में तर्क दिया देखें):

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 

उत्तर

13

निम्न कोड एक विंडोज फ़ंक्शन का उपयोग करता है जो Excel से अधिक सटीक है। इसे http://msdn.microsoft.com/en-us/library/aa730921.aspx#Office2007excelPerf_MakingWorkbooksCalculateFaster से लिया गया है। यही पृष्ठ 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

यह लिंक सुनहरा है! धन्यवाद! – aevanko

+1

उस टुकड़े का लेखक स्टैक ओवरफ्लो में एक नियमित योगदानकर्ता है। एक्सेल और प्रदर्शन के बारे में उनकी अपनी वेबसाइट पर बहुत अधिक जानकारी है: http://www.decisionmodels.com/ – jtolle

+1

क्या आप लिंक सड़कों को रोकने के लिए अपने उत्तर में दिए गए लिंक में कोड को सारांशित कर सकते हैं? इसके अलावा, आपूर्ति किए गए माइक्रोटिमर कोड 64-बिट एक्सेल पर काम नहीं कर रहे हैं। क्या 64-बिट उपयोगकर्ताओं के लिए कोई विकल्प हैं? – StockB

6

दिलचस्प सवाल है। यह वास्तव में एक पूर्ण उत्तर नहीं है लेकिन टिप्पणी के रूप में पोस्ट करने में बहुत लंबा समय है।
क्या मैं का उपयोग प्रक्रिया के इस प्रकार है:

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 

इस तरह, आप अपने कोड जहां भी आप चाहते डाल सकते हैं और केवल दो बार (उदाहरण के लिए) कॉल करनी होगी:

If C_DEBUG Then Call Chrono 

पर कोड के भाग के अंत में और अंत में आप परीक्षण करना चाहते हैं।

फिर भी, मैं कहूंगा कि कोई वास्तविक "सटीक" विधि नहीं है क्योंकि यह आपके कंप्यूटर पर क्या चल रहा है इस पर निर्भर करता है। मैं कहूंगा कि ये विधियां अधिकतर बताती हैं कि कौन सा कोड बेहतर दूसरे की तुलना में बेहतर है।

2

कोई भी माप शोर होने जा रहा है, इसलिए यदि आप परिशुद्धता चाहते हैं, तो माप को कई बार दोहराएं और परिणाम औसत करें।

1

Professional Excel Development एक dll उपयोगिता PerfMon है कि मैं पसंद करते हैं, इसकी शुद्धता के लिए होता है, और यह आसानी से मेनू के एक जोड़े के साथ कोड भर डाला जा सकता है के रूप में क्लिक

संबंधित मुद्दे