C# 通过从WinForms ListView中删除项来优化性能
我有一个ListView,它显示来自另一个应用程序的传入消息。我将在很长一段时间内收到这些消息,因此我无法将它们全部保存在ListView中,在某个时候内存将满。此外,我每秒收到许多项目,我的整个应用程序应该有一个良好的性能 当前我的ListView以虚拟模式运行。为了减少所需的内存,如果达到项目的最大数量,我将从虚拟列表中删除索引0处的项目 我现在的问题是移除所需的时间非常长。有没有办法优化这个 以下是我的一些代码,以阐明我的工作:C# 通过从WinForms ListView中删除项来优化性能,c#,winforms,performance,listview,C#,Winforms,Performance,Listview,我有一个ListView,它显示来自另一个应用程序的传入消息。我将在很长一段时间内收到这些消息,因此我无法将它们全部保存在ListView中,在某个时候内存将满。此外,我每秒收到许多项目,我的整个应用程序应该有一个良好的性能 当前我的ListView以虚拟模式运行。为了减少所需的内存,如果达到项目的最大数量,我将从虚拟列表中删除索引0处的项目 我现在的问题是移除所需的时间非常长。有没有办法优化这个 以下是我的一些代码,以阐明我的工作: private uint maxItems = 10000;
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];
}
private uint maxItems=10000;
私有列表virtualist=新列表();
private bool autoScroll=true;
公共无效添加行(ListViewItem换行)
{
开始更新();
添加(换行符);
if(virtualist.Count>=maxItems)
{
virtualist.RemoveAt(0);
}
其他的
{
this.virtualistsize=virtualist.Count;
}
如果(自动滚动)
{
this.TopItem=项目[Items.Count-1];
}
其他的
{
if(virtualist.Count==maxItems-1)
{
this.TopItem=项目[this.TopItem.Index-1];
}
}
EndUpdate();
}
私有void ListView_RetrieveVirtualItem(对象发送方,RetrieveVirtualItemEventArgs e)
{
e、 Item=virtualist[e.ItemIndex];
}
winforms在设计上效率不高,但您可以通过将列表项“接收”移动到单独的线程,然后向UI线程发送更新UI的调用来提高效率,因此,速度较慢的winforms UI不会妨碍应用程序处理传入消息。如果你想要一个最终的解决方案,放弃winforms,使用任何一种基于XAML的最新技术,这些技术比winforms快几个数量级,并且具有内置的UI虚拟化。他的问题其实不是winforms。这是“为什么删除列表的第一个元素(数据结构)很慢。”答案在于如何实现该集合类并分配内存。您不想使用列表,而是希望使用环形缓冲区或类似的数据结构,用较新的项目覆盖较早的项目。是的,但是如何使用我的listview显示存储在环形缓冲区中的数据?但是,我现在正在将wpf用于我的应用程序中与性能相关的部分。但是谢谢你的评论!