向 Listview 添加大量项目

Mos*_*ieh 5 .net c# winforms

我有一个列表视图,用作简单搜索应用程序的索引。索引中的每一项都是一个词,单击该项会将该项添加到搜索文本框中。用户可以先单击她/他喜欢的任何单词并将它们放到搜索文本框中,然后单击搜索,在文档中进行搜索。问题是向 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;
            }
        }
Run Code Online (Sandbox Code Playgroud)

Lum*_*mmo 3

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

这基本上是一个扩展的虚拟 ListView,速度非常快,而且额外的好处是使用起来更好。文档声称它“可以在不到 0.1 秒的时间内构建 10,000 个对象的列表”,虽然我不能保证每当我使用它时我从未注意到任何严重的滞后。不过,许可对您来说可能是一个问题。