RUS  ENG 

Проблемы при работе со слоем в памяти

Страницы: 1
RSS
Проблемы при работе со слоем в памяти
 
Задача в следующем.
Требуется найти кратчайший путь от двух произвольно выбранных точек. Делается следующее. Имеем слой созданный на основе слоя "Геонимы", слой представлен узлами и участками для реализации метода поиска кратчайшего пути. Во время выполнения произвольно выбираем две точки (в цикле) и достраиваем узел и участок, к нашему слою предварительно определив ближайшие узлы на слое для каждой из двух точек. Таким образом, получаем структуру графа с начальной и конечной точками. После определения кратчайшего пути удаляем ранее созданные объекты (два узла и два участка) и т.д. Это по существу. Теперь о проблеме.
В случае физического изменения слоя, т.е. не выгруженного в память, путь определяется нормально, но тут есть свои нежелательные моменты - скорость выполнения, что важно!, и есть вероятность испортить слой при возникновении некоторых сбойных моментов во время выполнения - оставить не удаленными созданные объекты на слое, даже при выполнении всех обработок исключительных ситуаций. Что касаемо слоя выгруженного в память то первый путь между первыми двумя точками определяется корректно, но при последующих - нет! Поиск определяет часть старого пути плюс путь между созданным узлом и узлом слоя. Другими словами определяемое количество ключей входящих в путь остается тем же что и в самом первом проходе. Действия производятся те же, создание и удаление, при новой итерации цикла. Одно отличие, при работе со слоем на физическом уровне ключи создаваемых элементов постоянно увеличиваются на единицу даже при удалении, при работе со слоем в памяти, при удалении ключ будет тем же что и созданный ранее... Предпринималось обеспечить такой же принцип создания ключей как на физическом уровне, но это не помогло... Куда копать дальше?
За ранее спасибо!
Юра ИАЦ
 
1. Если определяются ближайшие узлы до выбранной пары точек, то совершенно не обязательно добавлять в слой еще два узла и два участка. Достаточно найти путь между найденными точками, а результирующий путь достроить соединением этих точек с исходными.
2. В этом случае скорость поиска пути одинаковая для слоя в памяти и обычного. Для слоя в памяти еще время уйдет на загрузку в память.
3. Данные, по которым строится расчетный граф беруться с диска. Т.е. при изменении слоя в памяти расчетный граф не перестраивается. Слой в памяти создавался для отображения мобильных объектов и не стояла цель его полного функционирования, как у обычного слоя.
4. Ключ слоя - это аналог инкрементного поля. Меняется только в сторону увеличения (без специальных воздействий). Для слоя в памяти немного иначе. Там за этим особого контроля нет, т.к. все что в него добавляется, теряется при выходе из программы.
Страницы: 1