А он этот набор иногда очищает?vdemidov писал(а):который хранит весь набор меток для отображения на экране и, в случае необходимости, запрашивает
Вопросы по исходному коду
-
zed
- Гуру
- Сообщения: 2888
- Зарегистрирован: 16 авг 2008, 20:21
- Благодарил (а): 89 раз
- Поблагодарили: 568 раз
Re: Вопросы по исходному коду
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Вопросы по исходному коду
Очищает, если отключается отображение меток. Во всех остальных случаях он просто заменяется более актуальным. Но делает это всегда воркер, который у тебя упал после ошибки обращения к базе меток, так что этот набор при таких условиях очищаться не будет.zed писал(а):А он этот набор иногда очищает?vdemidov писал(а):который хранит весь набор меток для отображения на экране и, в случае необходимости, запрашивает
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
-
zed
- Гуру
- Сообщения: 2888
- Зарегистрирован: 16 авг 2008, 20:21
- Благодарил (а): 89 раз
- Поблагодарили: 568 раз
Re: Вопросы по исходному коду
Ну, то что оно упало, меня мало волнует. Меня волнует, что вся база меток залетает в память. И насколько я вижу, отключение видимости меток, на занимаемой памяти никак не сказывается.
Я надеялся, что отключив кэш в памяти для меток, снизится потребление памяти, а оно как-то совсем не заметно. Только на каждый чих из базы тягать метки приходится.
Я надеялся, что отключив кэш в памяти для меток, снизится потребление памяти, а оно как-то совсем не заметно. Только на каждый чих из базы тягать метки приходится.
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Вопросы по исходному коду
Она залезает в память, только если вся отображается на экране и очищается при отключении меток. Так что если меток на экране немного, то и в памяти их будет немного. Но если ты хочешь отобразить все метки на нулевом зуме, то тебе в любом случае придется их все загрузить в память.zed писал(а):Ну, то что оно упало, меня мало волнует. Меня волнует, что вся база меток залетает в память. И насколько я вижу, отключение видимости меток, на занимаемой памяти никак не сказывается.
Я надеялся, что отключив кэш в памяти для меток, снизится потребление памяти, а оно как-то совсем не заметно. Только на каждый чих из базы тягать метки приходится.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
-
zed
- Гуру
- Сообщения: 2888
- Зарегистрирован: 16 авг 2008, 20:21
- Благодарил (а): 89 раз
- Поблагодарили: 568 раз
Re: Вопросы по исходному коду
Ок, ты меня успокоил.
Появился ещё вопрос, что надо сделать, чтобы прикрутить фильтр по размеру меток, чтобы не вытягивать из базы то, что отобразить в конечном итоге не получится. Об этом был тикет, и вроде там какое-то простое решение возможно? Я думаю, пришла пора его опробовать. Подскажи, чего и как?
Появился ещё вопрос, что надо сделать, чтобы прикрутить фильтр по размеру меток, чтобы не вытягивать из базы то, что отобразить в конечном итоге не получится. Об этом был тикет, и вроде там какое-то простое решение возможно? Я думаю, пришла пора его опробовать. Подскажи, чего и как?
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Вопросы по исходному коду
Ну вроде как сошлись на том, что нужно добавить в запрос прямоугольника меток параметр с минимальными шириной и высотой геометрий в LonLat и при отборе из базы отбрасывать те метки у которых MBR меньше этих значений. А вот как эти минимальные значения выбирать в TVectorItemSubsetChangeableForMarksLayer это уже нужно подумать. Например размер запрашиваемого прямоугольника делить на количество пикселей в спроецированной версии этого прямоугольника.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
-
zed
- Гуру
- Сообщения: 2888
- Зарегистрирован: 16 авг 2008, 20:21
- Благодарил (а): 89 раз
- Поблагодарили: 568 раз
Re: Вопросы по исходному коду
Определить средний размер пикселя в LonLat координатах для текущего прямоугольника и передать этот размер?
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Вопросы по исходному коду
Ну да. Возможно умножить его на какую-то константу. Или параметр завести в каком-то конфиге, если есть подходящий.zed писал(а):Определить средний размер пикселя в LonLat координатах для текущего прямоугольника и передать этот размер?
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Re: Вопросы по исходному коду
Может быть ORM открывает базу как-то эксклюзивно?zed писал(а):Во-первых, все запросы в базу (даже на чтение) получают отлуп от SQLite с сообщением, что база заблокирована
Многоюзерное чтение должно быть в остальных случаях без проблем.
Даже если читать в рамках транзакции.
Вообще довольно странно, что ровно один запрос из пяти не закэширован.zed писал(а):Частично работает опция Информация о метке: в базу прилетает запрос, обламывается, но окошко с информацией появляется и в сводной информации всё заполнено: площадь, количество частей и проч. Не отображается только описание метки.
Я бы предположил, что особенность в кэшировании BLOBов на уровне ORM.
Может внутри ORM-а?zed писал(а):где оно кэшируется и как долго тот кэш живёт?
-
zed
- Гуру
- Сообщения: 2888
- Зарегистрирован: 16 авг 2008, 20:21
- Благодарил (а): 89 раз
- Поблагодарили: 568 раз
Re: Вопросы по исходному коду
Ну, вторая копия читала всё на ура. Даже смогла метку записать в базу, но эта запись была фатальной для обеих копий программы.vasketsov писал(а):Может быть ORM открывает базу как-то эксклюзивно?
Многоюзерное чтение должно быть в остальных случаях без проблем.
Не, ORM тут ни при чём. Я поставил брекпоинты на чтение данных из базы - на них просто не прилетали запросы, так что до ORM дело не доходило. А когда доходило (при открытии управления метками, к примеру), то падало с SQLITE_BUSY(5). Как верно заметил vdemidov, из-за самого первого эксепшена в базе, умер поток, который слушал базу и ходил за метками для отрисовки, вот оно и застыло.vasketsov писал(а):Вообще довольно странно, что ровно один запрос из пяти не закэширован.
Про кэширование в ORM вычитал: там есть Statement cache и небольшой Global JSON result cache (всего 16 Мб по дефолту), так что оно особой погоды не делает, а помогает бороться с однотипными запросами, которые идут один за одним.
А как там сделать многопользовательское чтение/запись в метки, нужно думать много и усердно. У тебя как это сделано?