別のアプリケーションからの受信メッセージを表示する 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];
}