На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

[MAPAPI] ImportFromAnySxfEx потребляемая память

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
[MAPAPI] ImportFromAnySxfEx потребляемая память, ImportFromAnySxfEx потребляет много памяти.
 
Здравствуйте, продолжаю возиться с импортом SXF, столкнулся с проблемой:
Код
int main(int argc, char* argv[]){
    std::cout << "SxfUtil" << std::endl;
//    if (!gis::coord::GisCoord::init()){
//        std::cerr << "Can not initialize libGisCoord" << std::endl;
//        return -1;
//    }
    QString sxfFilePath = QString::fromStdString(std::string(argv[1]));
    QString rscFilePath = QString::fromStdString(std::string(argv[2]));
    system("rm -rf /tmp/newMap; mkdir /tmp/newMap");
    QByteArray rscKoi8r = gis::common::convertStringToKOI8_R(rscFilePath);
    QByteArray sxfKoi8r = gis::common::convertStringToKOI8_R(sxfFilePath);
    char buf[MAX_PATH] ={};
    memcpy(buf, "/tmp/newMap/new.sit", strlen("/tmp/newMap/new.sit")+1);
    long rc = panorama::ImportFromAnySxfEx(0, sxfKoi8r.constData(), rscKoi8r.constData(), buf, MAX_PATH, onMsg, 0, 0);
    qDebug() << __FUNCTION__ << "import rc:" << rc;
//    gis::coord::GisCoord::deinit();
    return 0;
}

Программа просто запускает функцию ImportFromAnySxfEx, и вся память куда-то девается, под конец остаётся 4.5 Mb.
Пример

Я искусственно забрал 8 Mb памяти, чтоб памяти точно не хватало - и функция виснет, успев выдать под конец
Цитата
WM_ERRORSXF

Пример с падением из-за нехватки памятиМодифицированный пример, потребляющий в пустую 8Mb данных.
Код
int main(int argc, char* argv[]){
    std::cout << "SxfUtil" << std::endl;
//    if (!gis::coord::GisCoord::init()){
//        std::cerr << "Can not initialize libGisCoord" << std::endl;
//        return -1;
//    }
    QString sxfFilePath = QString::fromStdString(std::string(argv[1]));
    QString rscFilePath = QString::fromStdString(std::string(argv[2]));
    system("rm -rf /tmp/newMap; mkdir /tmp/newMap");
    QByteArray rscKoi8r = gis::common::convertStringToKOI8_R(rscFilePath);
    QByteArray sxfKoi8r = gis::common::convertStringToKOI8_R(sxfFilePath);
    char* testBuf = new char[1024*1024*8];
    for (int i = 0; i < 1024*1024*4; i++){
        testBuf[i + 1024*1024*4] = testBuf[i];
    }
    Q_UNUSED(testBuf);
    char buf[MAX_PATH] ={};
    memcpy(buf, "/tmp/newMap/new.sit", strlen("/tmp/newMap/new.sit")+1);
    long rc = panorama::ImportFromAnySxfEx(0, sxfKoi8r.constData(), rscKoi8r.constData(), buf, MAX_PATH, onMsg, 0, 0);
    qDebug() << __FUNCTION__ << "import rc:" << rc;
    delete []testBuf;
//    gis::coord::GisCoord::deinit();
    return 0;
}

Планировалась работа по импорту SXF в главном приложении, которое при запуске съедает больше 8Mb. То есть мы не сможем использовать функцию импорта SXF, не завершив главное приложение.


В результате там получаются файлы (sit и сопутствующие) в сумме размером около 60-65 Mb, примерно столько и съедает функция ImportFromAnySxfEx, как-будто пишет сначала в память а потом уже сбрасывает на диск когда импорт завершён.

В качестве исходных данных используется SXF файл Рязанской области с вашего сайта: Карта рязанской области


Важное уточнение - память кончается на нашей ARM платформе.

Вопрос - такое поведение связано с большим количеством объектов в вышеуказанном SXF?
Можно ли как-то соптимизровать потребление памяти ?

Пока всё что мне приходит в голову (если ничего улучшить в функции ImportFromAnySxfEx нельзя) - это брать описание формата SXF, и вручную разбивать его на более мелкие файлы (ломая головую над объектами на границе более мелких файлов).
Изменено: Владимир Егоров - 03.07.2018 19:34:32
 
Тэкс, мне тут объяснили что в требованиях было прописано наличие как минимум 512 Mb (чё-то я забыл про этот момент), а плату для отладки не GUI приложений мне дали какую-то урезанную, вопрос про потребление памяти не то чтобы снимается, но уже не критичен.
Хотелось бы просто комментарий получить, оптимально ли потребление памяти в ImportFromAnySxfEx, и если нет планируются ли оптимизации в будущем.
 
А нет, в требованиях для i.MX 6 всё таки не менее 256 Mb. У нас планируется делать платы почти все на 512 Mb, но будут и какие-то изделия с 256 Mb на борту, и наше ПО должно будет работать и на таких платах.
Видимо будем отключать поддержку импорта SXF на таких платах, либо как-то обрабатывать большие SXF, разбивая их на более мелкие.
 
И снова я не прав, не менее 256 Mb свободной оперативной памяти для обработки картографических данных средствами gisdesigner.

То есть всё в порядке, вопрос снимается, попрошу нормальную плату для отлатки.
 
Если можно удалите ветку
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности