如果您正在处理大型列表(假设大小为1GB),则需要调整大小以便为其他项目腾出空间。是否可以在调整大小时读取/写入该列表,或者在操作完成之前调用是否会被调用?
答案 0 :(得分:5)
你说“1GB大小”但这究竟意味着什么?请记住,如果您正在使用引用类型,那么列表中的所有内容都是一堆引用 - 因此“列表及其所有元素”占用的大部分内存将会出现在元素本身,除非你有很多重复的引用。
现在,关于你自己的问题 - List<T>
不是线程安全的。在另一个线程中修改它时,您不应该尝试来读取它。如果你需要在多个线程中使用一个列表,并且其中一些修改它,你应该使用锁定来确保只有一个线程在时间访问它(或者可能是多个线程读取,但不是写入)。
答案 1 :(得分:0)
如果您正在处理一个非常大的列表,我强烈建议您在使用之前预先分配空间,这样可以避免它动态增长很多。如果您希望使用演出,请计算出能够处理演出的容量,并创建具有该容量的列表。这应该消除了扩展的需要,你的问题就会消失。
如果您需要列表中的并发功能,我会研究.NET的并行扩展。存在允许多线程访问的并发集合。我不确定它们是否允许在调整大小时进行并发访问,但值得一看。并行扩展也将作为.NET 4.0的一部分包含在内。