筆者在開發一個小程序的時候,遇到一個需求,就是要把指定的文本內容打開,逐行判斷、組裝後再顯示在Text控件中。
起初,筆者使用
while(streamreader.Peek()>0)
{
...
textBox1.Text += strline;
}
streamreader.close();
在運行的過程中無錯誤,可是在裝載數據的時候效率低下,裝載1000行的記錄居然需要15秒左右,大大的影響了使用。
在調試過程中,筆者發現,streamreader.Open函數調用並不怎麼需要耗時,而循環讀完這1000行數據的耗時也不到1秒,因此,把耗時的操作鎖定在textBox1.Text+=strline上,猜想,可能是textBox1.Text在聲明時分配了一定的內存,在每次賦值的過程中可能又需要重新分配內存,因textBox1控件所占空間比較大,因此重新分配內存占用了大部分的時間。
為了證實這個猜想,筆者把程序修改為:
string strData="";
while(streamreader.Peek()>0)
{
...
strData+= strline;
}
textBox1.Text=strData;
streamreader.close();
經調試運行,在加載1000行記錄的數據文件僅需要1秒鐘左右的時間。
這個案例說明,對控件、類屬性需要增量賦值時,最好先賦值到一個變量,然後再將變量的值賦給控件、類屬性,以避免因為頻繁修改控件、類屬性而頻繁修改內存而導致效率低下。