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