2012-02-06 15 views
5

कहें कि इसमें एक बाइट सरणी है जिसमें 100,000 बाइट हैं। मैं प्रत्येक बाइट को अपने पाठ के प्रतिनिधित्व में परिवर्तित करना चाहता हूं। उदाहरण के लिए:क्या हजारों वस्तुओं के माध्यम से लूप करने का कोई तेज तरीका है?

byte[] b = new byte[55000]; 

for(int i = 0; i < b.Length; i++) 
{ 
Console.WriteLine(ConvertToString(b[i])); 
} 

उपरोक्त कोड को पूरा करने में लगभग 35 सेकंड लगते हैं, क्या कोई तरीका है कि मैं इसे लगभग 5 सेकंड तक काट सकता हूं?

+3

आप 'Console.WriteLine के अलावा कुछ उपयोग करने की कोशिश की है()' या यह पूरी तरह से और फिर गिर समय की आवश्यकता का परीक्षण? भले ही यह केवल एक स्ट्रिंगबिल्डर का उपयोग कर रहा हो और फिर सभी लूप पूरा होने के बाद स्ट्रिंगबिल्डर स्ट्रिंग को आउटपुट करना चाहिए, इसे मदद करनी चाहिए। –

+0

मल्टीथ्रेडिंग – Maheep

उत्तर

4

जैसा कि मेरी टिप्पणी में बताया गया है, मैं Console.WriteLine() विधि को हटाने का सुझाव दूंगा। मैं यह भी सुझाव दूंगा कि इसे लूप में टाला जाए। आम तौर पर यदि आप देखना चाहते हैं कि संसाधित किया जा रहा है तो आप Debug.WriteLine() (MSDN) का उपयोग करेंगे या ब्रेकपॉइंट सेट करेंगे (यहां तक ​​कि एक सशर्त ब्रेकपॉइंट भी यदि आपके पास एक विशिष्ट मामला है जो सही काम नहीं कर रहा है)। उसके बाद फिर से मैं एक स्ट्रिंग निर्माता का उपयोग करने का सुझाव देते हैं कि आप डेटा लौटाने के लिए की जरूरत है:

byte[] b = new byte[55000]; 
StringBuilder myStringBuilder = new StringBuilder(); 

for(int i = 0; i < b.Length; i++) 
{ 
    myStringBuilder.AppendLine(ConvertToString(b[i])); 
} 
Console.Write(myStringBuilder.ToString()); 
+0

अपने सुझावों का उपयोग करके, मुझे यह ** ** अनुरोधित 5 सेकंड के तहत ** ** में काम करने के लिए मिला - भयानक नौकरी, धन्यवाद, गैरी। –

3

एक बात मैं शौकीन है एक Parallel.For Loop अभी की तुलना में तेजी बात कर सकते हैं के साथ लिखें ..

static void Main() 
    { 
     int[] nums = Enumerable.Range(0, 1000000).ToArray(); 
     long total = 0; 

     // Use type parameter to make subtotal a long, not an int 
     Parallel.For<long>(0, nums.Length,() => 0, (j, loop, subtotal) => 
     { 
      subtotal += nums[j]; 
      return subtotal; 
     }, 
      (x) => Interlocked.Add(ref total, x) 
     ); 

     Console.WriteLine("The total is {0}", total); 
     Console.WriteLine("Press any key to exit"); 
     Console.ReadKey(); 
    } 
+0

का उपयोग करने के लिए एक बात यह है कि समांतर तरीकों का उपयोग करते समय ऑर्डर बदल दिया जाएगा। '.ऑर्डरर्ड()' मदद करने में सक्षम हो सकता है हालांकि प्रदर्शन प्रदर्शन होगा। –

+0

इस मामले में, मैं जो कर रहा हूं उसके लिए आदेश बहुत महत्वपूर्ण है। Console.WriteLine() को किसी अन्य फ़ंक्शन द्वारा प्रतिस्थापित किया जा रहा है। –

-1

प्रोफाइल अपने कोड को देखने के लिए क्या विधि सबसे अधिक समय ले रही है। उस विधि पर अपने अनुकूलन प्रयासों पर ध्यान केंद्रित करें।