当我使用10lack项设置CheckedListBox的DataSource时。它的应用仍然是最多3分钟的理想选择。
List<string> list = new List<string>();
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += ((o, a) =>
{
//1Lakh unique records.
for (int i = 0; i < 100000; i++)
list.Add("Item" + i);
});
worker.RunWorkerCompleted += ((obj, ea) =>
{
//Assign the 1Lack records to the CheckedListBox.
//>>Here is the UI gets hanged.(Need to wait more than 10 - 20 seconds to gets the response)
checkedListBox1.DataSource = list;
});
worker.RunWorkerAsync();
有没有办法优化加载选中列表框中项目的时间延迟。
答案 0 :(得分:1)
List,Dictionary和其他动态扩展集合可以从预定义的大小中受益匪浅。如果您知道将放入约100万个项目,请在List-constructor中将大小设置为1百万。如果您有固定的大小,请使用数组。但是您面临的真正问题可能是GUI更新缓慢。我不熟悉CheckedListBox控件,但如果它支持虚拟化,你应该启用它。但我认为它没有。正如评论中所建议的那样,另一种方法是以较小的批次填充控件,并允许GUI在两者之间进行更新。不要一次性设置DataSource,而是在DoWork中尝试将它们分批添加到大约100个项目中。您可能必须在主线程上调用它。您也可以尝试在主线程上执行所有这些,并在批次之间使用DoEvents,看看是否这样做。可能不如异步方法好,但值得一试。