bri*_*ght 10 c# tree immutability roslyn
据我所知,Roslyn的预发布版本实现了不可变树,正如Eric Lippert撰写的这篇优秀博客文章所述.但是,该帖子的结尾是:
"成本是这个系统很复杂,如果"红色"外墙变大,可能会占用大量内存.我们目前正在做实验,看看我们是否可以在不损失优惠的情况下降低部分成本."
我想问一下发布版本的结果.我已经开始检查Roslyn 源代码,但代码相当复杂.
我感兴趣的是关于上述成本的低级设计结果.
在讨论论坛上,VSadov对Roslyn的表现和不可变树的实现有了很好的了解:https://roslyn.codeplex.com/discussions/541953
在高层次上,他讨论了并发,绿色节点的重复数据删除,终端的重复数据删除以及这些树中字符串的重复数据删除.
他还谈到了红树的懒惰.不是在每次文本更改后计算红树,而是仅在有人请求时才计算红树.
最后,他讨论了红树以及它的弱点这一事实.我从来没有使用或看过这个WeakReference
类,VSadov提供了如何在红树中使用它的一个很好的概述.基本上,允许垃圾收集器清理红树的部分,如果需要,可以在以后重新创建它们.我对实现并不熟悉,但Eric Lippert指出红树外观会导致大量内存占用.我想这些WeakReferences
有助于在某种程度上缓解这个问题.