【发布时间】:2021-08-27 14:58:36
【问题描述】:
在线程When immutable collections are preferable then concurrent 中指出,不可变集合可能会更慢,但它们可以节省内存。如果不可变集合的每次更改都会导致创建新对象,这怎么可能?
我知道并发集合是指一个对象,它使用同步原语。那么不可变集合如何比并发集合节省更多内存呢?
【问题讨论】:
-
我不特别喜欢那个链接问题中的任何答案......主要的一点是,当访问一个不可变对象时,你可以确定它不会改变你.读取时不需要持有锁,不需要制作任何防御性副本等。读取并发集合时,如果在读取时集合发生更改,则需要确保一切安全,这意味着它需要在内部使用锁和其他技巧。当然有一个权衡。
-
“如果不可变集合的每次更改都会导致创建新对象,那怎么可能?”——这并不完全正确。不可变集合经过精心构造,因此如果您修改集合,您将获得一个新的、已更改的集合,但它会利用为原始集合分配的大部分数据。但是,是的,这是有代价的,这就是为什么这个问题谈到对经常读取但很少写入的数据使用不可变结构
标签: c# concurrency immutability immutable-collections