我正在使用ObservableCollection
,后台线程中每秒会添加25个项目。使用Insert
将项目添加到第0个位置。一段时间后,旧的项目将在后台线程中删除。最后的项目正在使用RemoveAt
删除。此集合绑定到数据网格。由于这些操作正在进行,因此CPU使用率正在增加,并且UI没有响应。
我尝试过创建自定义堆栈,但由于无法有效地从底部删除项目,因此无法满足完整的要求。
我需要创建一个可绑定的自定义集合,它将项目插入顶部并以非常有效的方式从底部删除。
期待任何形式的意见/建议。感谢。
答案 0 :(得分:1)
如何从ObservableCollection
派生自定义集合,只添加最少的额外功能?
class ExtendedObservableCollection<T> : ObservableCollection<T>
{
public void AddRange(int startingIndex, IEnumerable<T> items)
{
var notifier = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, items.ToList(), startingIndex);
foreach (var item in items)
{
// insert to the underlying collection to avoid change events
Items.Insert(startingIndex++, item);
}
OnCollectionChanged(notifier);
}
public void RemoveRange(int startingIndex, int count)
{
// Do it yourself
}
}