我有一个listview,它用作简单搜索应用程序的索引。索引的每个项目都是一个单词,单击该项目会将该项目添加到搜索文本框中。用户可以首先点击她/他喜欢的任何单词,然后点击搜索文本框,然后单击搜索,搜索文档。 问题是向ListView添加超过1000个项目需要大量的运行时间! 我设计了一个进度条并添加了一个计时器,一旦表单加载,它就会开始向列表视图添加项目。这给应用程序提供了响应,但效率仍然很低。 我怀疑当文档库增长足够时,索引中可能有大约100,000个单词,所以我需要一种更有效的方法来执行此操作。也许我需要将ListView组件更改为其他内容。 这是计时器中的代码,用于将项目添加到列表视图中:
if (!listViewDone)
{
int pos = 0;
ListView listView1 = Search.getInstance().getListView();
listView1.BeginUpdate();
for (pos = listViewPos; pos < termf.Count && pos < listViewPos + listViewChunk; ++pos)
{
TermFreq t = termf[pos];
listView1.Items.Add(new ListViewItem(new String[] { t.term }));
progressBar1.Value = pos;
}
listView1.EndUpdate();
listViewPos = pos;
if (pos == termf.Count)
{
listViewDone = true;
termf = null;
timer1.Enabled = false;
Visible = false;
}
}
答案 0 :(得分:3)
正如hmemcpy所提到的,VirtualMode
会大大加快速度。我不确定该项目的商业性质,但我使用了包含FastObjectListView
变体的优秀开源ObjectListView。
这基本上是一个非常快速的扩展虚拟ListView,并且可以更好地使用。该文档声称它“可以在不到0.1秒的时间内建立10,000个对象的列表”,而且每当我使用它时我都无法保证,我从未注意到任何严重的延迟。然而,许可可能是一个问题。
答案 1 :(得分:2)
不要使用列表视图,它并不意味着处理这么多项目,即使具有完美的性能也会惹恼您的用户。请考虑使用自动完成文本框。
答案 2 :(得分:2)
如果需要在ListView中显示那么多项,最好的选择是使用ListView的Virtual Mode
。这样,ListView将只显示可见项目。
答案 3 :(得分:0)
我检查了列表框而不是listview,并且更快!整个过程不到一秒钟,至少30倍。