2

这个问题是关于 Java JTree 或 Window .Net 树 (Winforms) 或 Adob​​e Flex 树。

在客户端-服务器应用程序中(对于 Flex,它实际上是 Web),我有一个带有分层数据的树(在 Windows 资源管理器类型的界面中)。现在,当用户从服务器请求更多数据时,我会懒惰地加载树。这很好,最多可以运行大约 750K 个节点(在 .Net Winforms 和 Adob​​e Flex 上进行了经验测试),但之后它变得迟缓。但是数据库增长很快(主要是因为用户可以粘贴大量节点),拥有 2000 万个节点的数据库并非不可能。

当分支折叠时我应该从树中释放数据以便垃圾收集器可以释放内存吗?这很好,但是如果用户没有效率并且不折叠分支怎么办?我应该做一个内存管理模块来关闭一段时间未触及的分支吗?

这一切似乎都需要做很多工作,以免内存不足。

编辑:我应该发布节点崩溃的数据吗?如果有,什么时候?弱对象缓存的想法很好,但我是否应该继续填充 UI 直到它崩溃(也许这不是一个坏主意)?

4

2 回答 2

1

在我见过的大多数框架中,树结构本身是相当有效的,但是如果你在每个树叶上都有一个不平凡的对象,它会很快添加。

最简单的方法是不在树叶上存储任何东西,而是在渲染/绘制/更新/任何方法上,从弱引用缓存中选择你的对象。如果不存在,请从服务器加载。诀窍是不保留对对象的任何其他引用,只保留缓存中的弱引用。这样,它仍然可用,但在必要时收集。

于 2008-11-12T22:34:20.080 回答
1

如果用户不折叠分支,那么我猜他们将滚动 750K 到 20M 个节点,对吧?从用户 POV 看来,对我来说效率很低。所以,问题很可能是自我执行的。

于 2008-11-12T22:43:38.127 回答