将大量项目添加到Listview

时间:2010-06-29 04:18:47

标签: c# .net winforms

我有一个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;
            }
        }

4 个答案:

答案 0 :(得分:3)

正如hmemcpy所提到的,VirtualMode会大大加快速度。我不确定该项目的商业性质,但我使用了包含FastObjectListView变体的优秀开源ObjectListView

这基本上是一个非常快速的扩展虚拟ListView,并且可以更好地使用。该文档声称它“可以在不到0.1秒的时间内建立10,000个对象的列表”,而且每当我使用它时我都无法保证,我从未注意到任何严重的延迟。然而,许可可能是一个问题。

答案 1 :(得分:2)

不要使用列表视图,它并不意味着处理这么多项目,即使具有完美的性能也会惹恼您的用户。请考虑使用自动完成文本框。

答案 2 :(得分:2)

如果需要在ListView中显示那么多项,最好的选择是使用ListView的Virtual Mode。这样,ListView将只显示可见项目。

答案 3 :(得分:0)

我检查了列表框而不是listview,并且更快!整个过程不到一秒钟,至少30倍。