C# 刷新listview的性能

C# 刷新listview的性能,c#,winforms,performance,listview,C#,Winforms,Performance,Listview,我有一个ListView控件,它包含几个条目(大约300个)。当我打开它时,它启动得很快。我做了一些事情,并调用btnRefresh\u单击按钮事件将数据填充到ListView中 public ListWords() { InitializeComponent(); lvwColumnSorter = new ListViewColumnSorter(); this.lstWords.Visible = true; this.btnCheckLinks.Vis

我有一个ListView控件,它包含几个条目(大约300个)。当我打开它时,它启动得很快。我做了一些事情,并调用btnRefresh\u单击按钮事件将数据填充到ListView中

public ListWords()
{
    InitializeComponent();

    lvwColumnSorter = new ListViewColumnSorter();

    this.lstWords.Visible = true;
    this.btnCheckLinks.Visible = true;
    this.lstWords.ListViewItemSorter = lvwColumnSorter;

    btnRefresh_Click(null, new EventArgs());
}
该活动的目的是:

public void btnRefresh_Click(object sender, EventArgs e)
{
    lstWords.Items.Clear();

    foreach (var word in WordData.AllWords)
    {
        string[] lvi = { 
            word.Id.ToString(), word.Name, word.Link,
            word.Status, word.Count.ToString() 
        };

        lstWords.Items.Add(new ListViewItem(lvi));
   }
}
到目前为止还不错。但是如果我真的按下按钮手动刷新ListView,大约需要4到5秒!如果我关闭表单并打开一个新表单,那么刷新后的数据会立即出现,速度会更快


这种行为的原因是什么?我无法理解在构造函数中以编程方式调用它和通过按钮按下事件手动调用它之间的区别。提前谢谢

我会移除你的分拣机,运行BeginUpdate和EndUpdate,这可能会大大加快刷新速度。请看。分拣机就是问题所在。在刷新事件中,我将其临时设置为null,使用Begin-and-EndUpdate构建新列表,然后再次设置。这是一个巨大的性能提升,谢谢!我会移除你的分拣机,运行BeginUpdate和EndUpdate,这可能会大大加快刷新速度。请看。分拣机就是问题所在。在刷新事件中,我将其临时设置为null,使用Begin-and-EndUpdate构建新列表,然后再次设置。这是一个巨大的性能提升,谢谢!