說明
TextBox是設計程式時常用到的元件,但是每次使用的時候,我都有些疑惑:
1. 設定TextBox.Text最快的方式為何?
2. 若要不斷更新大量文字,那是直接指定TextBox.Text的值會比較快?還是藉由StringBuilder儲存更新文字才套用至TextBox.Text比較快?
剛好最近比較閒,所以就寫了隻程式比較一下。
解決方法
首先一定要先加入「using System.Diagnostics」,因為將使用到其中的StopWatch類別,用以計算執行的時間。
測試的方式是重複將「-1-」(中間數字會遞增至1000),以TextBox顯示,並會捲動捲軸至最新的資料。
我想到了四種設定方式,來測試到底何種方式較快。
1. 將要更新的文字放入StringBuilder中,然後再套用至TextBox.Text。
1: textBox1.Text = string.Empty;2: StringBuilder sb = new StringBuilder(100000);3:4: Stopwatch sw = new Stopwatch();5: sw.Start();6: for (int i = 0; i < 1000; i++)7: {8: sb.AppendLine("-" + i.ToString() + "-");9: textBox1.Text = sb.ToString();10: textBox1.SelectionStart = textBox1.Text.Length;11: textBox1.ScrollToCaret();12: }13: sw.Stop();14: MessageBox.Show(sw.ElapsedMilliseconds.ToString());15:
2. 直接指定TextBox.Text的文字
1: textBox1.Text = string.Empty;2:3: Stopwatch sw = new Stopwatch();4: sw.Start();5: for (int i = 0; i < 1000; i++)6: {7: textBox1.Text += "-" + i.ToString() + "-" + Environment.NewLine;8: textBox1.SelectionStart = textBox1.Text.Length;9: textBox1.ScrollToCaret();10: }11: sw.Stop();12: MessageBox.Show(sw.ElapsedMilliseconds.ToString());13:
3. 直接將文字插入至TextBox.Text的最後面 (就方法論而言應該是最快的吧)
1: textBox1.Text = string.Empty;2:3: Stopwatch sw = new Stopwatch();4: sw.Start();5: for (int i = 0; i < 1000; i++)6: {7: textBox1.SelectionStart = textBox1.Text.Length;8:9: textBox1.SelectedText = "-" + i.ToString() + "-" + Environment.NewLine;10: textBox1.ScrollToCaret();11: }12: sw.Stop();13: MessageBox.Show(sw.ElapsedMilliseconds.ToString());14:
4. 將要更新的文字放入StringBuilder中,然後再套用至TextBox.Text的最後面。(有點多此一舉)
1: textBox1.Text = string.Empty;2: StringBuilder sb = new StringBuilder();3:4: Stopwatch sw = new Stopwatch();5: sw.Start();6: for (int i = 0; i < 1000; i++)7: {8: sb = new StringBuilder();9: sb.Append("-" + i.ToString() + "-" + Environment.NewLine);10: textBox1.SelectionStart = textBox1.Text.Length;11: textBox1.SelectedText = sb.ToString();12: textBox1.ScrollToCaret();13: }14: sw.Stop();15: MessageBox.Show(sw.ElapsedMilliseconds.ToString());16:17:18:
5. 程式介面如下圖
統計結果如下 (單位是微秒(ms),最後一行是平均值)
結論
經過了十次的比較,我得出了以下的結論:
1. StringBuilder在一般添加文字較快,但在此處差異不大 (方法1和方法2約差0.2秒;方法3和方法4約差0.02秒)。
2. 直接將文字填入TextBox.Text的最後是最快的。(好像在說廢話)
3. 方法1和方法2因為是重新填入大量資料,所以TextBox閃爍得很厲害。
以上的結論和大家分享一下囉。
沒有留言:
張貼留言