c# - 将大量项目添加到 ListView

标签 c# .net winforms

我有一个 ListView ,用作简单搜索应用程序的索引。索引的每一项都是一个词,单击该项目会将其添加到搜索文本框中。用户可以先点击她/他喜欢的任何词,然后点击搜索文本框,然后点击搜索,在文档中进行搜索。 问题是向 ListView 添加大约 1000 多个项目需要大量的运行时间! 我设计了一个进度条并添加了一个计时器,它会在表单加载后立即开始向 ListView 添加项目。这为应用程序提供了响应能力,但效率仍然很低。 我怀疑当文档库足够大时索引中可能有大约 100,000 个单词,因此我需要一种更有效的方法来执行此操作。也许我需要将 ListView 组件更改为其他组件。 这是计时器中用于将项目添加到 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;
            }
        }

最佳答案

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

这基本上是一个扩展的虚拟 ListView,速度非常快,而且作为一个额外的好处,它更容易使用。该文档声称它“可以在不到 0.1 秒的时间内构建一个包含 10,000 个对象的列表”,虽然我不能保证每次使用它时我都没有注意到任何严重的延迟。不过,许可对您来说可能是个问题。

关于c# - 将大量项目添加到 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3137831/

相关文章:

c# - 当 C++ 调用 C# 函数时,如何从 C# 调用 C++ 委托(delegate)函数?

java - Java VM 与 .NET CLR 的性能基准测试

c# - TreeView不显示对象层次结构

c# - 如何在 Visual Studio 2015 中为多个解决方案和项目设置单个 Nuget 包文件夹

c# - 区分和排序列表 LINQ

c# - 获取 "Could not find an implementation of the query pattern for source type ' ExcelQueryable<T >'. "错误

c# - 在 C# 中检查一个整数值是否为 Null

c++ - 运行 WinForm 的函数 "In Background"(VS2010 c++)

c# - 防止继承的TabControl创建TabPages

c# - 从多个文本框创建 QR 码并将其解码回文本框