2010-02-08 16 views
5

मैं CultureInfo.CurrentCulture उपयोग कर रहा हूँ जब string.formatप्रदर्शन पर विचार जब गुणों का उपयोग करके कई बार

का उपयोग कर कि अगर आप CurrentCulture एक बहुत का उपयोग कर रहे this blog

यह सिर्फ निहितार्थ है के शब्दों में मेरे तार formating, यह एक निजी चर में इसे पढ़ने के बजाय CultureInfo.CurrentCulture के लिए कॉल के अनेक परिवर्तन कर के लायक हो सकता है अन्यथा आप घड़ी चक्र 0 अप का उपयोग कर रहेअनावश्यक रूप से।

इतनी के रूप में इस लेखक

var culture = CultureInfo.CurrentCulture 
string.Format(culture,"{0} some format string","some args"); 
string.Format(culture,"{0} some format string","some other args"); 

प्रति

string.Format(CultureInfo.CurrentCulture,"{0} some format string","some args"); 
string.Format(CultureInfo.CurrentCulture,"{0} some format string","some other args"); 
MSDN के अनुसार

की तुलना में बेहतर है? CultureInfo.CurrentCulture is a property

वहाँ एक प्रदर्शन जब एक संपत्ति कई बार तक पहुँचने संबंधित जुर्माने की है ?

इसके अलावा मैं कुछ emperical विश्लेषण किया था और मेरी परीक्षण मुझे पता चलता है कि एक स्थानीय चर का उपयोग कर सीधे संपत्ति का उपयोग कर से ज्यादा महंगा है।

Stopwatch watch = new Stopwatch(); 

      int count = 100000000; 
      watch.Start(); 
      for(int i=0;i<count;i++) 
      { 
       string.Format(CultureInfo.CurrentCulture, "{0} is my name", "ram"); 
      } 


      watch.Stop(); 
       //EDIT:Reset watch 
       watch.Reset(); 


      Console.WriteLine(watch.Elapsed); 
      Console.WriteLine(watch.ElapsedMilliseconds); 
      Console.WriteLine(watch.ElapsedTicks); 


      Console.WriteLine("--------------------"); 
      var culture = CultureInfo.CurrentCulture; 
      watch.Start(); 
      for (int i=0; i < count; i++) 
      { 
       string.Format(culture, "{0} is my name", "ram"); 
      } 


      watch.Stop(); 

      Console.WriteLine(watch.Elapsed); 
      Console.WriteLine(watch.ElapsedMilliseconds); 
      Console.WriteLine(watch.ElapsedTicks); 

परिणाम:

00:00:29.6116306 
29611 
68922550970 
-------------------- 
00:00:27.3578116 
27357 
63676674390 

मेरे परीक्षणों से पता चलता है कि CultureInfo.CurrentCulture संपत्ति का उपयोग कर स्थानीय चर (जो लेखकों देखने के साथ विपरीत है) का उपयोग कर से बेहतर है। या मुझसे यहां कुछ छूट रहा है ?

संपादित करें: मैं तेह दूसरी यात्रा से पहले स्टॉपवॉच को रीसेट नहीं किया गया। इसलिए अंतर। स्टॉपवॉच को रीसेट करना, पुनरावृत्ति गिनती को अपडेट करना और परिणाम इस संपादन में

+3

अपने परीक्षण कोड में आप स्टॉपवॉच को रीसेट नहीं करते हैं। कैश संदर्भ का उपयोग वास्तव में तेज़ है। – Steven

+0

CultureInfo.CurrentCulture सस्ता नहीं है, लेकिन स्ट्रिंग। फोर्मेट अधिक महंगा है। – Steven

+0

स्टीवन, आप सही हैं, मैं स्टॉप घड़ी को रीसेट नहीं कर रहा था। आप इसे उत्तर के रूप में क्यों नहीं पोस्ट करते हैं और मैं अपना पोस्ट + अपडेट को उत्तर के रूप में अपडेट करूंगा। जो उत्सुक हैं, उनके लिए स्थानीय चर का उपयोग करना तेजी से है। 100 मिलियन पुनरावृत्तियों के लिए लगभग 2.473 सेकंड का अंतर !!! – ram

उत्तर

2

अपने कोड में एक बग नहीं है। अपने टेस्ट कोड में आप स्टॉपवॉच को रीसेट नहीं करते हैं। जब आप स्टॉप घड़ी को रीसेट करते हैं, तो आप देखेंगे कि कैश किए गए संदर्भ का उपयोग वास्तव में तेज़ है। CultureInfo.CurrentCulture सस्ता नहीं है, लेकिन स्ट्रिंग। फोर्मेट अधिक महंगा है।

3

आपको केवल संस्कृति परिवर्तक। कंटेंटकल्चर को स्थानीय चर में अनुकूलित करना चाहिए यदि कोई प्रोफाइलर आपके कोड में एक महत्वपूर्ण समस्या साबित करता है और यह भी कि स्थानीय चर में डालने से यह तेज़ी से हो जाता है । यह प्रोफ़ाइल दिखाती है कि न तो सच है इसलिए मैं इसे स्थानीय में नहीं डालूंगा।

7

एक सच्चा कारण से

String.Format(CultureInfo.CurrentCulture, "{0} some format string", "some args"); 
String.Format(CultureInfo.CurrentCulture, "{0} some format string", "some other args"); 

var culture = CultureInfo.CurrentCulture; 
String.Format(culture, "{0} some format string", "some args"); 
String.Format(culture, "{0} some format string", "some other args"); 

करने के लिए अपने कोड के पुनर्लेखन के लिए पठनीयता और रख-रखाव के लिए है। अब, अगर आप किसी कारण CultureInfo.CurrentCulture से एक CultureInfo कुछ विन्यास फाइल के माध्यम से भरी हुई या पैरामीटर आप केवल एक ही स्थान पर कोड को बदलने की जरूरत के लिए एक विधि के रूप में पारित कर दिया है कि करने के लिए संस्कृति बदलने के लिए की जरूरत है। प्रदर्शन में कोई फर्क नहीं पड़ता कि यह आपके कोड में अड़चन होने की अत्यधिक संभावना नहीं है एक माध्यमिक विचार यहाँ है और शायद।

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