2011-08-02 11 views
9

मैं एक इंटरफ़ेस के साथ काम कर रहा हूं जो ऑब्जेक्ट को इसके इनपुट के रूप में टाइप करता है। यह मेरे लिए दुर्भाग्यपूर्ण है क्योंकि मेरे पास आदिम डेटा है जिसे कभी-कभी इंटरफ़ेस के माध्यम से पारित करने की आवश्यकता होती है। यह निश्चित रूप से मुझे बॉक्स में मजबूर करता है।एकल तत्व आदिम सरणी में गुजरकर मुक्केबाजी से बचें

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

एक विचार जो मैंने आज किया था, एक स्थैतिक आदिम सरणी को प्रीलोकेट करना है, और इसमें मूल मूल्य को स्टोर करना है, और उसके बाद सरणी को पारित करना है (और फिर इंटरफ़ेस के कार्यान्वयन में, डबल से बाहर ले जाएं सरणी

मैंने इसका परीक्षण करने के लिए कुछ कोड लिखे हैं। उचित मूल्यों (10 मिलियन) के लिए, मैं देख रहा हूं कि सरणी विधि स्पष्ट रूप से तेज़ी से है। क्योंकि मैं अपने परीक्षण के पुनरावृत्तियों की संख्या में वृद्धि करता हूं, दोनों अभिसरण।

मुझे आश्चर्य है कि किसी ने पहले इस दृष्टिकोण के बारे में सोचा है, और यदि इस कुएं को बेंचमार्क करने के बारे में कोई सुझाव है।

,210

उदाहरण कोड:

Double data = Double.valueOf(VALUE); 
inst.interface(data); 
//inside interface(Object object)... 
Double data = (Double) object; 
double d = data.value(); 

बनाम ...

doublearray[0] = VALUE; 
inst.interface(data); 
//inside interface(Object object)... 
double[] data = (double[]) object; 
double d = data[0]; 

धन्यवाद! आरबी

+0

क्यों वैश्विक 'डबल' चर नहीं है? – irreputable

उत्तर

1

के रूप में केवल एक ही वस्तु कभी (सरणी) आवंटित किया जाता है मैं, सरणी विकल्प के साथ जाना होगा, समय की संख्या की तुलना में आप autoboxing में एक आवंटित करने के लिए, भले ही valueOf() कुछ मान के लिए अनुकूलित है होगा।

+0

मेरे परीक्षण सरणी तकनीक को तीव्रता के क्रम के रूप में दिखाने के लिए दिखाते हैं! मुझे संदेह था कि यह कम से कम प्रतिस्पर्धी होगा, लेकिन यह मेरी अपेक्षा से कहीं अधिक था। – user321605

1

ऑटो-एक्सबॉक्स बनाम एकल-तत्व सरणी का उपयोग करने के बीच एक बड़ा अंतर यह है कि सरणी उत्परिवर्तनीय होगी, जो कुछ मामलों में अच्छी हो सकती है और अन्य मामलों में खराब हो सकती है। सरणी उत्परिवर्तनीय होने से मामलों में प्रदर्शन में सुधार होगा जहां सरणी की सामग्री को पढ़ने के लिए जा रहे तरीकों के विभिन्न चर को पारित करने के लिए एक ही सरणी का पुन: उपयोग करना सुरक्षित है, लेकिन इसका कोई संदर्भ नहीं है। हालांकि, यदि कोड अपने मूल्य को बनाए रखने के उद्देश्य से किसी एक सरणी में संदर्भ रखता है, तो यह कई प्रकार की हार्ड-टू-बग बग का कारण बन सकता है, और कुछ अन्य कोड सरणी में संग्रहीत मान को बदलता है।