c#中向大型集合添加和删除对象的复杂性

本文关键字:删除 对象 复杂性 添加 大型 集合 | 更新日期: 2023-09-27 17:49:55

几天前,我遇到了一个问题,我有一个具有历史数据或非常大量对象的集合。这个集合暴露给很多线程或客户端,所以,人们可能会对它进行迭代,有些人可能会在迭代时向它添加内容,有些人可能会从这个集合中删除内容。因此,修改可能会在c#中抛出"collection changed exception"。

现在,我需要在c#中设计一个数据结构或集合它满足了以下挑战:

  1. 你不能复制集合到不同的对象,因为集合非常大,所以复制它会导致我们大量的内存浪费。

  2. 当任何用户在迭代集合时添加到集合中时,应该在集合中添加新对象,不应该抛出任何异常,并且应该在迭代结束时读取

  3. 但是如果用户从集合中删除任何项,那么它应该抛出异常。

  4. 添加、删除和迭代应该是线程安全的。

c#中向大型集合添加和删除对象的复杂性

如果您真的坚持使用集合而不是数据库。常规的。net列表都不是一个好的选择。在这种情况下,你可以创建自己的列表类型,优化您的情况。

这取决于其他细节(你是否可以使用分页,你是否需要通过索引访问项目等),你可以使用什么技术。

一个想法是,你可以创建一个可变列表,只有当它改变时,你创建一个不可变的副本。所有客户端都使用最后一个不可变副本