2

我有一个 ListView,它显示来自另一个应用程序的传入消息。我会在很长一段时间内收到这些消息,所以我无法将它们全部保存在 ListView 中,有时内存会满。此外,我每秒收到很多项目,我的整个应用程序应该有良好的性能。

目前我的 ListView 在虚拟模式下运行。为了减少所需的内存,如果达到最大项目数,我会从我的虚拟列表中删除索引 0 处的项目。

我此时的问题是删除所需的时间非常长。有没有办法优化这个?

这是我的一些代码来阐明我的工作:

private uint maxItems = 10000;
private List<ListViewItem> virtualList = new List<ListViewItem>();
private bool autoScroll = true;

public void AddLine(ListViewItem newLine)
{    
    BeginUpdate();

    virtualList.Add(newLine);

    if (virtualList.Count >= maxItems)
    {
        virtualList.RemoveAt(0);
    }
    else
    {
        this.VirtualListSize = virtualList.Count;
    }

    if (autoScroll)
    {
        this.TopItem = Items[Items.Count - 1];
    }
    else
    {
        if (virtualList.Count == maxItems - 1)
        {
            this.TopItem = Items[this.TopItem.Index - 1];
        }
    }

    EndUpdate();
}

private void ListView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
    e.Item = virtualList[e.ItemIndex];
}
4

0 回答 0