2015-04-16 12 views
22

हम आसानी से समय फ़िक्स कॉल इलीक्सिर में कैसे कॉल कर सकते हैं?हम इलीक्सिर में आसानी से कॉल कैसे कर सकते हैं?

क्या यह सक्षम करने के लिए आईईएक्स में कोई छुपा स्विच है?

+4

मुझे नहीं लगता कि ऐसा करने का विकल्प है। ऐसा करने का शायद आसान और तेज़ तरीका एरलांग है ['टाइमर: टीसी/1-2-3'] (http://www.erlang.org/doc/man/timer.html#tc-1)। – whatyouhide

+0

@whatyouhide यकीन नहीं मैं क्या कर रहा हूँ गलत 'आईईएक्स (54)>: (Demo.sum 1000) ** (BadFunctionError) की उम्मीद एक समारोह timer.tc, मिल गया: 500,500 (stdlib) timer.erl: 165:: timer.tc/1' –

+4

जैसा कि आप पिछली टिप्पणी में लिंक किए गए 'टाइमर: टीसी/1' के लिए प्रलेखन में देख सकते हैं, अगर आप केवल' टाइमर: टीसी 'के लिए एक तर्क पारित कर रहे हैं एक समारोह। आपका उदाहरण होगा: timer.tc (fn -> Demo.sum (1000) अंत) '। यदि आप मॉड्यूल + फ़ंक्शन + तर्क तीन गुना पास करना चाहते हैं, तो बस 'timer.tc (डेमो,: योग, [1000])' के साथ जाएं। – whatyouhide

उत्तर

36

आप एक मॉड्यूल लिख सकते हैं जो किसी दिए गए फ़ंक्शन को माप सकता है। निम्नलिखित समारोह सेकंड में किसी दिए गए समारोह के क्रम रिटर्न:

defmodule Benchmark do 
    def measure(function) do 
    function 
    |> :timer.tc 
    |> elem(0) 
    |> Kernel./(1_000_000) 
    end 
end 

इस तरह यह प्रयोग करें:

iex> Benchmark.measure(fn -> 123456*654321 end) 
9.0e-6 

आप उपयोग करना है कि बेंचमार्किंग के लिए चाहते हैं, तो एक और जवाब है।

एकल रन निष्पादन समय को मापने से बेहतर दृष्टिकोण प्रति टाइमफ्रेम को मापने के लिए है। यह कोड को परीक्षण के तहत लेता है और इसे किसी दिए गए समय सीमा के भीतर दोहराता है। यह पद्धति अधिक सटीक परिणाम उत्पन्न करती है।

एक पुस्तकालय बुलाया Benchwarmer आपको लगता है कि के लिए उपयोग कर सकते हैं:

अपने mix.exs

def deps do 
    [ { :benchwarmer, "~> 0.0.2" } ] 
end 

को benchwarmer जोड़े, बस एक इनलाइन समारोह पारित:

iex> Benchwarmer.benchmark fn -> 123456*654321 end 
*** #Function<20.90072148/0 in :erl_eval.expr/5> *** 
1.2 sec  2M iterations 0.61 μs/op 

[%Benchwarmer.Results{...}] 
+1

धन्यवाद, यह Iex टूल में बनाना अच्छा लगेगा। –

+0

कार्य करने वाले समय की इकाई क्या है |>: timer.tc |> elem (0) |> कर्नेल.((_000_000) रिटर्न? क्या यह microseconds है? –

+0

बेंचवार्मर संस्करण "~> 0.0.2" होना चाहिए या निर्भरता स्थापित करना विफल हो जाएगा। – bartolsthoorn

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