SQLite Ненормальное использование памяти - PullRequest
1 голос
/ 08 ноября 2010

Мы пытаемся интегрировать SQLite в наше приложение и пытаемся заполнить его как кэш.Мы планируем использовать его как базу данных в памяти.Используя это в первый раз.Наше приложение основано на C ++.

Наше приложение взаимодействует с основной базой данных для извлечения данных и выполняет многочисленные операции.Эти операции, как правило, касаются одной таблицы, которая имеет довольно большой размер.Мы скопировали эту таблицу в SQLite, и следующие наблюдения:

Количество полей: 60 Количество записей: 1,00 000

Когда начинается заполнение данных, память приложения загружаетсярезко до ~ 1,4 ГБ от 120 МБ.В настоящее время наше приложение находится в состоянии ожидания и не выполняет каких-либо серьезных операций.Но, как правило, после запуска операций запускается использование памяти.Теперь с SQLite, как в Memory DB, и с таким высоким использованием памяти, мы не думаем, что сможем поддерживать эти многочисленные записи.

Q.Можно ли найти размер базы данных, когда она находится в памяти?

Когда я создаю БД на диске, размер БД составляет ~ 40 МБ.Но все же использование памяти приложения остается очень высоким. Q.Есть ли причина для такого высокого использования.Все буферы были очищены, и, как уже было сказано, БД не находится в памяти?

Любая помощь будет принята с благодарностью.

Спасибо и С уважением Sachin

Ответы [ 2 ]

0 голосов
/ 28 мая 2013

Смотрите это:

PRAGMA shrink_memory

Эта прагма вызывает соединение с базой данных, на котором она вызывается, чтобы освободить как можно больше памяти путем вызова sqlite3_db_release_memory ().

0 голосов
/ 08 ноября 2010

На ум приходит несколько вопросов ...

Каков размер каждой записи?

У вас есть инструменты для обнаружения утечек памяти для вашей платформы?

Я использовал SQLite в некоторых средах с ограниченными ресурсами так же, как вы используете его, и после исправления ошибок он был небольшим, стабильным и быстрым. IIRC было неясно, когда нужно было очистить некоторые вещи, используемые API-интерфейсом SQLite, и когда мы использовали инструменты для обнаружения утечек памяти, было довольно легко увидеть, в чем проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...