存储树数据结构
Storing Tree Data Structures
我在 vb.net 中构建了一个三叉树结构。
每个节点都创建为具有特定属性的对象。
这些节点存储在 ArrayList 中。
然后将这些 ArrayList 存储在另一个 ArrayList 中,这将是树。
当我 运行 这样说时,4000 步(即我的树中有 4000 个 ArrayList),最终的 ArrayList 将有 8001 个节点。对象总数大约为 8000*4000/3 = 大约 > 1000 万个节点。
这导致程序因内存溢出而崩溃。
存储我的树的最佳方法是什么,以便它可以像我想要的那样大?数据库或文本文件是前进的方向吗?
一种解决方案是按如下方式压缩树:
将每个对象映射到唯一的 ID,然后仅将 ID 存储在 ArrayList 中。每个对象的特定属性可以存储在数据库中。您可以在需要访问特定对象的属性时查询数据库。
如果有频繁访问的Object实例,你也可以使用某种缓存方案将这些Object的属性存储在内存中。
编辑: 如果 ids 的 ArrayLists 也开始超出内存,那么您可以尝试将 ids 分配给 ArrayLists,并将这些 ArrayLists 的内容存储在数据库中。
总而言之,使用某种压缩机制(以减少内存消耗)并将其与良好的缓存机制相结合(以减少磁盘访问次数)。
我在 vb.net 中构建了一个三叉树结构。 每个节点都创建为具有特定属性的对象。 这些节点存储在 ArrayList 中。 然后将这些 ArrayList 存储在另一个 ArrayList 中,这将是树。
当我 运行 这样说时,4000 步(即我的树中有 4000 个 ArrayList),最终的 ArrayList 将有 8001 个节点。对象总数大约为 8000*4000/3 = 大约 > 1000 万个节点。
这导致程序因内存溢出而崩溃。
存储我的树的最佳方法是什么,以便它可以像我想要的那样大?数据库或文本文件是前进的方向吗?
一种解决方案是按如下方式压缩树:
将每个对象映射到唯一的 ID,然后仅将 ID 存储在 ArrayList 中。每个对象的特定属性可以存储在数据库中。您可以在需要访问特定对象的属性时查询数据库。
如果有频繁访问的Object实例,你也可以使用某种缓存方案将这些Object的属性存储在内存中。
编辑: 如果 ids 的 ArrayLists 也开始超出内存,那么您可以尝试将 ids 分配给 ArrayLists,并将这些 ArrayLists 的内容存储在数据库中。
总而言之,使用某种压缩机制(以减少内存消耗)并将其与良好的缓存机制相结合(以减少磁盘访问次数)。