我对一些设计模式很感兴趣,它可以让我从任何树节点到树根的访问速度非常快,只需尽可能少的CPU和内存开销。
现在,迭代明显的解决方案,并解释它们不适用的原因:
走到树下直到找到根 - 这正是我目前正在做的事情,但由于树可以变得非常深,并且根访问非常频繁,这不是一个理想的解决方案,即使减轻了通过缓存和尽可能多地重用root来节省开销
将根节点指针存储在每个节点中 - 非常快,但会增加显着的内存开销,因为树很大
现在,如果只有一棵树,我可以使用单例,静态类成员或任何类似的方法,但是应用程序有多个树,每个树代表一个打开的项目。
在求助于搜索根目录之前,我的设计一次只涉及一个活动项目,所以我可以假设如果发生任何用户活动,它将针对活动项目,获取特定对象的根项目是一种非常有效的方法。
但是现在我有一个多窗口应用程序,其中每个窗口可以有一个不同的活动项目,还有项目间通信,可以触发任何编辑器窗口中当前不活动的项目内的活动。因此不再可能使用“活动项目指针”方法。
似乎我已经用尽所有选项,但可能会有一些花哨的设计模式可以给我一个很好的折衷方案?
答案 0 :(得分:0)
我选择了基于隔离不同树节点目的的解决方案。
大多数节点只是内容,但也有容器节点,它们在树中相当均匀地分布。
容器节点存储树根,并且由于它们很少且介于两者之间,因此内存开销最小化。查找时间也是如此,因为在到达根目录之前,我不再需要遍历整个树,而只需要遍历到最近的容器节点。
因此,在典型的使用场景中,通过增加大约1-2%的内存开销,可以将查找时间缩短2-3个数量级。不仅仅是公平妥协。