cJSON: Формат полей для вложенных структур

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Файл 5MB загружается 15-20 сек.
Да ладно, проверил на файле размером 190mb, время загрузки 0.09 сек:
[1368] Load time: 0.09s, file size: 189778220b

Код: Выделить всё

  PROGRAM

  INCLUDE('cjson.inc'), ONCE

  MAP
    INCLUDE('printf.inc'), ONCE
  END

sFileName                     STRING(256), AUTO
sFileContent                  &STRING, AUTO
tmStart                       LONG, AUTO
tmEnd                         LONG, AUTO
  CODE
  sFileName = 'citylots.json'
  tmStart = CLOCK()
  sFileContent &= json::LoadFile(sFileName)
  tmEnd = CLOCK()
  IF NOT sFileContent &= NULL
    printd('Load time: %fs, file size: %ib', (tmEnd-tmStart)/100, SIZE(sFileContent))
    DISPOSE(sFileContent)
  ELSE
    printd('Load time: %fs, file not found', (tmEnd-tmStart)/100)
  END
  
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Разве что Вы с дискет 5,25 файлы читаете.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Дед Пахом писал(а): 02 Январь 2023, 13:57 Разве что Вы с дискет 5,25 файлы читаете.
Спасибо за Новогодний юмор, но конечно же нет. ;)
Да это походный ноут который я беру с собой в неожиданные путешествия, но реально файл 5 MB грзится 15-20 сек.
А парсится за секунды.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

cJSON: Формат полей для вложенных структур

Сообщение finsoftrz »

Будь проклята эта бедность. :D
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Возможно, мы сделали неправильный акцент на моём сообщении.
Я не имею претензий ни к классу cJSON, ни к WinAPI. Я понимаю, что на загрузку файла нужно время.
Сейчас это время адекватно. Я всего лишь указал, что при массовой обработке заголовков JSON пакетов
оно получается большим и я ищу решение.
Более того - я благодарен за подсказку в нужном направлении и далее смогу всё решить сам. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Игорь Столяров писал(а): 02 Январь 2023, 19:22 Возможно, мы сделали неправильный акцент на моём сообщении.
Я не мог не отреагировать на сигнал. Сигнал не подтвердился! :-)
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Скорее была тема к обсуждению и каждый принял в ней участие так, как привык это делать.
А вот вопрос с индикацией процесса выполнения внутри методов - он остался. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Игорь Столяров писал(а): 02 Январь 2023, 21:36 А вот вопрос с индикацией процесса выполнения внутри методов - он остался.
Записал себе в TODO.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Дед Пахом писал(а): 02 Январь 2023, 21:39 Записал себе в TODO
За это отдельное :ty:
Это скорей вопрос удобства. Хотя есть товарищи, которые успеают набрать мой номер и сообщить,
что программа зависла пока загружается 10 MByte файл JSON. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Загрузил v1.35.
- depthLimit не влияет на скорость Parse(), хотя уменьшает объём используемой памяти.
- Пример использования ParseCallback: вывод текущего процента обработки в лог.

Код: Выделить всё

jsonFactory.ParseCallback     PROCEDURE(LONG pInputLength, LONG pCurrentPos, LONG pCurrentDepth)
curPercent                      LONG(0), STATIC
newPercent                      LONG, AUTO
  CODE
  newPercent = (pCurrentPos/pInputLength*100)
  IF newPercent > curPercent
    curPercent = newPercent
    printd('ParseCallback(%i, %i, %i): progress %i%%', pInputLength, pCurrentPos, pCurrentDepth, curPercent)
  END
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Дед Пахом писал(а): 02 Январь 2023, 13:48 Да ладно, проверил на файле размером 190mb, время загрузки 0.09 сек:
Полностью согласен.
Проблема не в загрузке текстового файла, а в том как тормозит parse_object(). :(

Если технологически требуется выполнять полный перебор всех тегов в JSON структуре -
может быть сделать возможность для прерывания Loop в parse_object() на ненужном теге ?
Что-то вроде:

Код: Выделить всё

Packet    Group
Heading     Group  ! Небольшой заголовок пакета
Fld01  String(40)
..
  end
Items       &Queue  ! Супер-тушка пакета c несколькими тысячами записей и массивом документов на несколько MByte.
          end
  Code
  MyJSon.BreakTag = 'items'  ! Получить только заголовок пакета для идентификации  
  Root &= MyJSon.ParseFile(sFileName_,CP_ACP)
  If Not (Root &= Null) ...
:ty: за рассмотрение вопроса !
Последний раз редактировалось Игорь Столяров 03 Январь 2023, 9:42, всего редактировалось 5 раз.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Дед Пахом писал(а): 03 Январь 2023, 0:56 depthLimit не влияет на скорость Parse(), хотя уменьшает объём используемой памяти
И ещё требует правильную вложенную иерархическую струтуру JSON - что не всегда в наших силах сделать
(обработка внешних данных)
Дед Пахом писал(а): 03 Январь 2023, 0:56 - Пример использования ParseCallback:
Это реально работает ! Принято на вооружение. :ty:
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Игорь Столяров писал(а): 03 Январь 2023, 6:15 может быть сделать возможность для прерывания Loop в parse_object() на ненужном теге ?
Нет, так не получится.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

cJSON: Формат полей для вложенных структур

Сообщение Игорь Столяров »

Дед Пахом писал(а): 03 Январь 2023, 12:50 Нет, так не получится.
Спасибо за ответ. Понятно. Прерывание (BREAK) не допускается.
А что-то вроде CYCLE для прокручивания структуры без анализа содержимого тегов, начиная с указанного тега ?
Т.е. начиная с заданного тега просто считаем, что содержимое всех тегов NULL.

Я немного покопался на предмет, что именно вызывает торможение в ParseFile() / parse_object() -
ведь теперь это хорошо видно через ParseCallback().

Секунды (которые как изввестно спрессованы в года) уходят на большие по размеру теги с файлами. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

cJSON: Формат полей для вложенных структур

Сообщение Дед Пахом »

Прервать или "прокрутить" не получится, сломается последовательность обработки "символ за символом".
Загрузил v1.36, можно ожидать прироста скорости на длинных строках.
С уважением, ДП
Закрыто