【发布时间】:2014-04-17 04:05:12
【问题描述】:
几天前,我遇到了一个问题,我有一个包含历史数据或大量对象的集合。这个集合暴露给这么多线程或客户端,所以,人们可能正在迭代它,有些人可能会添加到它,有些人可能会在迭代时删除到这个集合。因此,修改可能会在 c# 中引发“集合更改异常”。
现在,我需要在 c# 中设计一个数据结构或一个集合 它满足了以下挑战:
您不能将集合复制到不同的对象,因为集合非常大, 所以复制它会导致我们大量的内存浪费。
-
当任何用户在迭代集合时添加到集合中时,新对象应该被添加到集合中并且不应该引发任何异常,并且还应该在迭代结束时被读取。
但如果用户从集合中删除任何项目,那么它应该抛出异常。
添加、删除和迭代应该是线程安全的。不应该存在竞争条件。
【问题讨论】:
-
考虑使用数据库。
-
数据库是从磁盘读取的,它不在内存中。它会减慢整个操作
-
错误;数据库引擎将在可行的情况下将数据库保存在内存中。
-
他们需要多少数据?
-
IEnumerator 有一个合同,它应该抛出一个异常是枚举期间更改的可枚举
标签: c# multithreading generics ienumerable ienumerator