【问题标题】:Most efficient way to get a tree object's root node获取树对象根节点的最有效方法
【发布时间】:2018-03-01 16:59:35
【问题描述】:

我对某种设计模式很感兴趣,它可以让我以尽可能少的 CPU 和内存开销从任何树节点快速访问树根。

现在,重复显而易见的解决方案,并解释为什么它们不适用:

  • 沿着树向下直到找到根 - 这是我目前正在做的事情,但是由于树可以变得非常深并且根访问非常频繁,这不是一个理想的解决方案,即使减轻尽可能多地缓存和重用根目录的开销

  • 在每个节点中存储根节点指针 - 非常快,但会增加大量内存开销,因为树很大

现在,如果只有一棵树,我可以使用单例、静态类成员或任何类似的方法,但是应用程序有不止一棵树,每棵树都代表一个打开的项目。

在诉诸根目录之前,我的设计一次只涉及一个活动项目,所以我可以假设如果发生任何用户活动,它将针对活动项目,即是获取特定对象的根项的一种非常有效的方法。

但是现在我有一个多窗口应用程序,其中每个窗口可以有一个不同的活动项目,以及可以触发项目内的活动的项目间通信,该项目当前在任何编辑器窗口中都不活动。所以不再可能使用“活动项目指针”的方式。

似乎我已经用尽了所有选项,但可能有一些花哨的设计模式可以给我一个很好的折衷方案?

【问题讨论】:

    标签: performance design-patterns tree root memory-efficient


    【解决方案1】:

    我寻求了一个基于分离不同树节点的目的的解决方案。

    大多数节点只是简单的内容,但也有容器节点,它们在树中相当均匀地分布。

    容器节点存储树根,由于它们很少且介于两者之间,内存开销被最小化。查找时间也是如此,因为在到达根之前我不再需要遍历整个树,而只需向下遍历到最近的容器节点。

    因此,在典型的使用场景中,通过增加大约 1-2% 的内存开销,这将查找时间减少了 2-3 个数量级。一个更公平的妥协。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多