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