我需要将长度为2500个字符的950个字符串添加到列表框中。我在下面使用的方法需要2.5秒,理想情况下需要在500毫秒内完成。
Stopwatch sw = Stopwatch.StartNew();
listBox1.BeginUpdate();
listBox1.Items.AddRange(items.ToArray());
listBox1.EndUpdate();
sw.Stop();
优化插入时间的最佳方法是什么?
感谢。
答案 0 :(得分:1)
你可以尝试的一件事是改变这一行:
listBox1.Items.AddRange(items.ToArray());
这样的事情:
foreach (var item in items)
{
listBox1.Items.Add(item);
}
这样,在将项目放入ToArray()
之前,您没有创建全新数组(ListBox
调用)的开销。
答案 1 :(得分:1)
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