2015-04-29 4 views
0

У меня есть трехмерная древовидная структура, встроенная в vb.net. Каждый узел создается как объект с определенными свойствами. Эти узлы хранятся в ArrayList. Эти списки Array затем сохраняются в другом массиве ArrayList, который будет деревом.Сохранение структур данных дерева

Когда я запустил это, скажем, 4000 шагов (т. Е. 4000 ArrayLists в моем дереве), последний ArrayList будет иметь 8001 узел. Общее количество объектов составляет приблизительно 8000 * 4000/3 = приблизительно> 10 миллионов узлов.

Это приводит к сбою программы из-за переполнения памяти.

Каков наилучший способ хранения моего дерева, чтобы его можно было сделать так, как хотелось бы? Является ли база данных или текстовым файлом путь вперед?

ответ

0

Одним из решений было бы, чтобы сжать дерево следующим образом:

Карта каждого объекта с уникальным идентификатором, а затем хранить только идентификаторы в ArrayLists. Специфические свойства каждого объекта могут храниться в базе данных. И вы можете запрашивать базу данных всякий раз, когда вам нужно получить доступ к свойствам конкретного объекта.

Если часто встречаются экземпляры объектов Object, вы также можете использовать какую-то схему кэширования для хранения свойств этих объектов в памяти.

EDIT: Если ArrayLists идентификаторов также начинают превышая памяти, то вы могли бы попытаться назначить идентификаторы для ArrayLists, а также и хранить содержимое этих ArrayLists в базе данных.

Чтобы обобщить, используйте какой-то механизм сжатия (чтобы уменьшить потребление памяти) и соедините его с хорошим механизмом кеширования (чтобы уменьшить количество обращений к диску).

+0

Спасибо, vm .. Я дам это. – NK2013

Смежные вопросы