我需要添加長度爲2500個字符的950個字符串到列表框。我在下面使用的方法需要2.5秒,理想情況下它需要在少於500毫秒內發生。加快列表框插入時間
Stopwatch sw = Stopwatch.StartNew();
listBox1.BeginUpdate();
listBox1.Items.AddRange(items.ToArray());
listBox1.EndUpdate();
sw.Stop();
什麼是優化插入時間的最佳方法?
謝謝。
我需要添加長度爲2500個字符的950個字符串到列表框。我在下面使用的方法需要2.5秒,理想情況下它需要在少於500毫秒內發生。加快列表框插入時間
Stopwatch sw = Stopwatch.StartNew();
listBox1.BeginUpdate();
listBox1.Items.AddRange(items.ToArray());
listBox1.EndUpdate();
sw.Stop();
什麼是優化插入時間的最佳方法?
謝謝。
有一兩件事你可以嘗試正在改變這一行:
listBox1.Items.AddRange(items.ToArray());
到這樣的事情:
foreach (var item in items)
{
listBox1.Items.Add(item);
}
這樣的話,你沒有創建一個全新的陣列的開銷(中ToArray()
),然後將物品放入您的ListBox
。
列表框處理2500個字符。這是緩慢的。所有這些數據,包括從數組轉換,都是花生在內存中。因此,跳過ToArray步驟沒有什麼不同。如果你的用戶必須水平滾動才能看到這個信息,那麼很可能你會陷入「緩慢」的境地。
如果沒有,請考慮重構一點點。策略:只能放置儘可能多的字符 - 大約100個 - 可以在常規寬度的列表框中查看。完整的字符串保留在幕後。
Class TruncatedListItem Public Content as string Overrides sub ToString() as string ' Pardon me if this is wrong I always use intellisense return Mid(Content,1,100) end sub end class
For each each itm as string in Items dim tli as new TruncatedListItem tli.Content = itm listbox.add(tli) next
MyString = Ctype(Listbox.SelectedItem,string)
祝你好運!
我不在與.net上的Pc,因此如果它實際上並沒有加快速度,我們很抱歉。但我不明白它不會如何。如果我錯了,請盯住我的鼻子! – FastAl 2010-08-05 02:14:51
感謝您的建議。不幸的是,這需要與addrange方法相同的時間。 – Eric 2010-08-05 00:51:03
@Eric:嗯......好的。您是否碰巧擁有Visual Studio 2010及其分析器,或者是否有權訪問另一個分析器,它可以告訴您哪些行最耗時? – 2010-08-05 00:55:29
使用vs2010中包含的分析器看起來,所有的時間都花在「Add」或「AddRange」方法中。 – Eric 2010-08-05 01:13:47