जबकि Coursera से "स्केला विशेषज्ञता" होमवर्क करने मैं इस समस्या का सामना करना पड़ा (इस संस्करण सरल है और किसी भी होमवर्क विवरण शामिल नहीं है, यह सिर्फ सरणी ट्रेवर्सल है)स्काला पैटर्न मिलान प्रदर्शन
val chars: Array[Char] = some array
def fun1(idx:Int):Int = {
some code here (including the stop condition)
val c = chars(idx)
c match{
case '(' => fun1(idx+1)
case _ => fun1(idx+1)
}
}
इस कोड को 4 बार धीमी गति से
def fun2(idx: Int):Int = {
some code here (including the stop condition)
val c = chars(idx)
(c == '(') match{
case true => fun2(idx+1)
case _ => fun2(idx+1)
}
}
सभी मैं कर रहा हूँ मिलान पैटर्न बदल रहा है (मैं इसे ScalMeter का उपयोग कर चला रहा हूँ तो मैं आंकड़ों में विश्वास करते हैं)।
क्या कोई इस व्यवहार को समझा सकता है?
मुझे संदेह होगा कि यह मान्य बेंचमार्किंग विधि के पास कुछ भी है। स्कालामीटर परिणाम स्थिर होने तक दो दर्जनों गर्मियों की तरह करता है। आप एक ही डेटा का उपयोग करके परीक्षण भी नहीं करते हैं। –
हाँ, वही डेटा नहीं। लेकिन मुझे रनों के बीच बहुत करीबी परिणाम मिल रहे हैं। Stddev बेहद कम है, जो बताता है कि अगर मैं एक ही डेटा का उपयोग करता हूं, तो मुझे बहुत अंतर दिखाई नहीं देगा। जैसा कि उत्तर में बताया गया है, मैंने गर्मजोशी भी किया है, इसलिए यह सुनिश्चित न करें कि इस बेंचमार्क के बारे में आपको "अमान्य" क्या लगता है। मैं अपने निष्कर्षों द्वारा खड़े हो जाओ, और उन्हें निर्णायक (और reproducibly) का खंडन करने के लिए आप को चुनौती है, तो आप कर सकते हैं। – Dima
अपने कार्यों उधार, यहाँ स्केला मीटर के साथ बेंचमार्क है: https://gist.github.com/lukaszwawrzyk/a2505d5b3083bb72de51b8445fbb9a76 'देते चार समय: 13.172258374999998 ms' और' bool समय: ४.७३,९४,०४,५७५ ms'। यह प्रश्न में के रूप में सरणियों के लिए किया जाता है, तो का उपयोग कर एक अनुक्रमित seq परिणाम वास्तव में करीब नहीं बल्कि बराबर (95 सेकंड बनाम 80 सेकंड) –