मैं निम्न विधि के लिए एक डबल सरणी परिवर्तित करने के लिए है List<string>
एक:सी # Double.ToString() प्रदर्शन मुद्दा
static Dest Test(Source s)
{
Dest d = new Dest();
if (s.A24 != null)
{
double[] dd = s.A24;
int cnt = dd.Length;
List<string> lst = new List<string>();
for (int i = 0; i < cnt; i++)
lst.Add(((double)dd[i]).ToString());
d.A24 = lst;
}
else
{
d.A24 = null;
}
return d;
}
एक पाश में एक List.Add() कर के अनुसार सबसे तेज़ तरीका है की तरह लगता है मेरी बेंचमार्क सभी विभिन्न LINQ और कन्वर्ट चाल को मार रहा है।
यह वास्तव में धीमा है। एक लाख कॉल के लिए 2400ms (कोई भी CPU, 64-बिट पसंद करते हैं)। तो मैं इसे तेजी से बनाने के विभिन्न तरीकों से प्रयोग कर रहा था। आइए मान लीजिए कि मैं स्रोत या dest सूचियों आदि को कैश नहीं कर सकता हूं।
तो वैसे भी, मैंने यहां कुछ अजीब चीज़ों पर ठोकर खाई ... अगर मैं lst को बदलता हूं।() लाइन को डबल के बजाय दशमलव पर डालने के लिए जोड़ें, यह बहुत तेज़ है। 900 एमएस बनाम 2400 एमएमएस।
यहाँ मेरे सवालों
1) दशमलव डबल अधिक सटीकता है तो है, तो मैं प्रकार इस फिल्म में कुछ भी, सही खोना नहीं चाहिए?
2) दशमलव क्यों है। ToString() इतना तेज़ है तो Double.ToString()?
3) क्या यह एक उचित अनुकूलन है, या क्या मुझे कुछ महत्वपूर्ण विवरण याद आ रहा है जहां यह मुझे काटने के लिए वापस आ जाएगा?
मैं थोड़ा और स्मृति का उपयोग करने के बारे में चिंतित नहीं हूं, मैं केवल प्रदर्शन के बारे में चिंतित हूं।
कुछ भी नहीं है इस बिंदु पर परीक्षण डाटा के लिए परिष्कृत, बस का उपयोग कर:
s.A24 = new double[] { 1.2, 3.4, 5.6 };
क्या आप एक [mcve] पोस्ट कर सकते हैं? वैसे, जब आप dd.Length का उपयोग कर सकते हैं तो 'dd.Count()' को कॉल करने के लिए LINQ का उपयोग करना अनावश्यक है। – nvoigt
'lst.AddRange (dd.Select (x => x.ToString())); 'कोई तेज़? –
मूल्य क्या हैं, आपको उनसे कितना सटीकता चाहिए, और आपको किस प्रारूप में उनकी आवश्यकता है? (मैं वैसे ही वही व्यवहार देखता हूं ...) –