我有一个列表视图,用作简单搜索应用程序的索引。索引中的每一项都是一个词,单击该项会将该项添加到搜索文本框中。用户可以先单击她/他喜欢的任何单词并将它们放到搜索文本框中,然后单击搜索,在文档中进行搜索。问题是向 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)
正如 hmemcpy 提到的,这VirtualMode将大大加快速度。我不确定该项目的商业性质,但我使用了优秀的开源ObjectListView,其中包含一个FastObjectListView变体。
这基本上是一个扩展的虚拟 ListView,速度非常快,而且额外的好处是使用起来更好。文档声称它“可以在不到 0.1 秒的时间内构建 10,000 个对象的列表”,虽然我不能保证每当我使用它时我从未注意到任何严重的滞后。不过,许可对您来说可能是一个问题。
| 归档时间: |
|
| 查看次数: |
4787 次 |
| 最近记录: |