![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2009
Сообщений: 17
|
Вобщем ситуация такая. Есть приложение на AIR, которое производит много расчетов и результат записывает в базу SQLite. Размер конечной базы 5-10 Гб, 100 000 000 000 строк, 30-50 столбцов.
Расчетное время создания ~10 часов. Данные пишутся пачками: сделали 100 000 расчетов, на секунду передали управление программе (обновили индикаторы типа прогрессбара и т.д.), открыли базу, создали транзакцию в 100000 цикле, сделали commit(), закрыли базу, ушли на следующий цикл расчетов. Проблема в том, что при каждом акте записи процесс adl.exe отъедает 10+ Мб памяти, не возвращая ее обратно (даже после закрытия базы). Соответственно когда кончаются системные ресурсы (это где-то 20-25 миллионов строк в базе), т.е adl.exe съел несколько гиг памяти, он с грохотом валится. Как это лечить? может кто сталкивался? Или AIR не предназначен для серьезных приложений и надо переходить на Java+MySQL? AIR 2.0 beta 2, Flex - flex_sdk_4.1.0.14492, FD 3.0.6 RTM |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 17
|
Нашел источник проблемы. Оказывается, что экземпляр SQLStatement хранит в себе все запросы и транзакции, даже одинаковые, которые через него прогонялись. Т.о., если вы при открытии или создании базы создали один экземпляр SQLStatement, а по окончании работы с базой его закрыли, сделав при этом транзакций на 2 гига, то в памяти будут висеть эти самые 2 гига. Соответственно, после каждой транзакции надо его обнулять и создавать заново, причем, созданный заново, он не будет почему-то доступен сразу, и соответствующего евента тоже нет.
|
|
|||||
|
Регистрация: Apr 2009
Сообщений: 17
|
Приложение у меня считает все исходы слот-машины. AIR потому что кросс платформенный, с инсталлятором, ЦП и часть кода уже была написана на AS3. SQLite потому что оно уже AIR'ом поддерживается. Может потом на яве перепишу, главное что оно пока так работает. ))
|
![]() |
![]() |
Часовой пояс GMT +4, время: 00:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|