我有一个 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];
}