2010-06-24 75 views
0

考慮下面的程序,for循環中的性能問題?

 List<string> l_lstRawData = new List<string>(); 
    ........ 
    ........ 

現在l_lstRawData填充有數據,例如,

l_lstRawData[0] = "11111101101010................................0000011101010101"; 
    l_lstRawData[1] = "11111101111111...............................0000011101010101"; 
    l_lstRawData[2] = "11111101101010................................0000011101010101"; 
    l_lstRawData[3] = "11100001101010................................0000011101010101"; 
    l_lstRawData[4] = "11000101101010................................0000011101010101"; 
    l_lstRawData[5] = "11111101101010................................0000011101010101"; 

現在我想要的結果 列表l_lstResultData =新列表();

l_lstResultData [0] = "111111"; 
    l_lstResultData [1] = "111111"; 
    l_lstResultData [2] = "111101"; 
    l_lstResultData [3] = "111001"; 
    l_lstResultData [4] = "111001"; 

這是我使用的代碼, l_lstRawData的長度等於在l_lstRawData每個單獨的元件

string l_strTempData = ""; 
    for(int l_nData;l_nData< l_lstRawData.Length;l_nData++) 
    { 
     l_strTempData = ""; 
     for(int l_nItem = 0;l_nItem< l_lstRawData.Length;l_nItem++) 
     { 
      l_strTempData += l_lstRawData[**l_nData**].ToString(); 
     }  
     l_lstResultData.Add(l_strTempData); 
    } 

需要很長的時間,因爲l_lstRawData長度的每個項目是更比60,000 ..... 是否有可能使用其他方法?

如果您有任何疑問,請將我恢復。

+0

爲什麼你將位編碼爲字符串?可能會有更好的方式來做你想做的事情,這樣做會快得多。另外,for循環的目標是什麼,因爲如果我理解正確,現在它所做的就是將l_listRawData中的所有項合併到一個字符串中,並將其添加到l_lstResultData中,然後執行l_listRawData時間。 – 2010-06-24 14:53:48

+0

您在循環中沒有使用'l_nData',所以我認爲您的代碼在開始時是致命的缺陷,無論性能如何。 – 2010-06-24 14:58:29

+0

另外,您的一個輸入字符串比其他輸入字符串短,您希望它如何處理它? – 2010-06-24 14:59:39

回答

1

你可以使用,而不是字符串連接StringBuilder的開始。

其次,你在循環中做什麼可以用一個非常快的子串方法來完成。

0

使用StringBuilder!字符串是免費的(他們不會改變)。每次連接字符串時,運行時都會創建一個帶有新內容的NEW字符串,並提供較舊版本的垃圾回收。當你循環進行時,這可能會成爲一個重大問題。使用StringBuilder代替,你會看到一個戲劇性的差異。